Шпаргалка: обходить имена файлов без разбора ls
Сохраните пробелы и переводы строки в именах, настройте поведение пустого glob и используйте NUL для передачи путей между программами.
Когда открыть эту шпаргалку
Вывод ls оформляется для просмотра и не является универсальным списком аргументов. Перевод строки допустим внутри имени, поэтому построчное разбиение может превратить один файл в два вымышленных пути. Выберите подходящий способ перечисления до запуска цикла.
Выбор команды
Для одного уровня достаточно glob Bash. Для дерева используйте find и явно задайте границы имён. В обоих случаях цитируйте переменную при использовании.
| Что выяснить | Команда или выражение | Как читать результат |
|---|---|---|
| Имена текущего уровня | for file in ./*.txt; do …; done | Glob не обходит подкаталоги рекурсивно. |
| Ни одного совпадения | shopt -s nullglob | Шаблон без совпадений исчезает; настройка влияет на последующие раскрытия. |
| Дерево с NUL | find . -type f -print0 | Получатель должен понимать NUL, обычный построчный цикл не подходит. |
| Показать необычное имя | printf '%q\n' "$file" | Экранированное представление для диагностики в Bash. |
| Не склеивать результат | "$file" | Один элемент списка остаётся одним аргументом команды. |
Короткая последовательность
Subshell оставляет nullglob внутри примера. Цикл только печатает имена текстовых файлов первого уровня в экранированном виде.
( shopt -s nullglob; for file in ./*.txt; do printf '%q\n' "$file"; done )Проверка вывода
При отсутствии совпадений тело цикла не выполняется. В обычной конфигурации без nullglob буквальный шаблон может сохраниться как аргумент. Файлы, начинающиеся с точки, не входят в этот шаблон при обычных настройках Bash.
Границы применения
Выбор списка и последующее действие разделены во времени: объект может исчезнуть или смениться. Для дерева, изменяемого другими пользователями, одной правильной расстановки кавычек недостаточно для устранения всех гонок. Здесь показан просмотр, а не массовое изменение.
Технические источники
Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.
- Руководство bash(1)
- Руководство find(1)
Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.
Примеры для собственной Linux-системы с Bash и указанными утилитами. Наличие пакетов и набор опций проверьте в установленной версии; браузерный терминал поддерживает только своё подмножество.
От материала к практике
Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.