TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #542 930
Как безопасно обрабатывать файлы с пробелами в именах

Файлы с пробелами, табами и спецсимволами - классическая причина мистических багов в bash. Скрипт вроде работает… пока не встретит файл типа: my file.txt или backup (old).tar.gz

➖ Анти-паттерн


for f in $(ls); do
echo "$f"
done


Проблема: bash режет вывод по пробелам и переводам строк. Файл my file.txt превратится в два разных слова.

➕ Правильный способ №1 - glob + кавычки


for f in *; do
echo "$f"
done


Почему это безопаснее: * раскрывается самим shell; каждый элемент цикла - это отдельное имя файла; кавычки сохраняют пробелы.

Если нужен определённый тип:


for f in *.log; do
[[ -e "$f" ]] || continue
echo "$f"
done


[[ -e "$f" ]] защищает, если совпадений нет.

➕ Правильный способ №2 - find -print0. Для рекурсивного обхода:


find . -type f -print0 | while IFS= read -r -d '' f; do
echo "$f"
done


Почему это хорошо:

-print0 разделяет файлы нулевым байтом;
это безопасно даже для пробелов, табов и спецсимволов;
read -d '' читает до NUL, а не до пробела.

▪️ Безопасная передача в xargs


find . -type f -print0 | xargs -0 rm -f


Пара: -print0 и xargs -0 должны идти вместе.

BashTex 📱 #bash #utils
  • 👍 7
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →