Шпаргалки / Объяснение

Шпаргалка: обходить имена файлов без разбора ls

Сохраните пробелы и переводы строки в именах, настройте поведение пустого glob и используйте NUL для передачи путей между программами.

Начальный6 минОбщие принципы LinuxGNU Coreutils · documented stable optionsBash · pipeline semantics

Когда открыть эту шпаргалку

Вывод ls оформляется для просмотра и не является универсальным списком аргументов. Перевод строки допустим внутри имени, поэтому построчное разбиение может превратить один файл в два вымышленных пути. Выберите подходящий способ перечисления до запуска цикла.

Выбор команды

Для одного уровня достаточно glob Bash. Для дерева используйте find и явно задайте границы имён. В обоих случаях цитируйте переменную при использовании.

Что выяснитьКоманда или выражениеКак читать результат
Имена текущего уровняfor file in ./*.txt; do …; doneGlob не обходит подкаталоги рекурсивно.
Ни одного совпаденияshopt -s nullglobШаблон без совпадений исчезает; настройка влияет на последующие раскрытия.
Дерево с NULfind . -type f -print0Получатель должен понимать NUL, обычный построчный цикл не подходит.
Показать необычное имяprintf '%q\n' "$file"Экранированное представление для диагностики в Bash.
Не склеивать результат"$file"Один элемент списка остаётся одним аргументом команды.

Короткая последовательность

Subshell оставляет nullglob внутри примера. Цикл только печатает имена текстовых файлов первого уровня в экранированном виде.

Локальная Linux-система
( 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 или проверьте знакомые команды в учебном терминале.

Поиск по Linux

Поиск локальный. ↑ ↓ — перейти к результату, Enter — открыть.

Навигация