find и xargs -0: обработать файлы с пробелами в имени
Обычный вывод find разделяется переводом строки, а xargs по умолчанию делит пути по пробелам. Пара -print0 и -0 передаёт имена через NUL и безопасно обрабатывает пробелы и кавычки. ????? ??????????? ?????????? ???????? ?????? ??????? ? ????????? ?????? ? ??????? ?????.
Рабочий пример
root=$(mktemp -d)
touch \"$root/report final.txt\" \"$root/second.txt\"
find \"$root\" -type f -name '*.txt' -print0 | xargs -0 -r -n 1 basename
rm -rf -- \"$root\"NUL нельзя использовать внутри имени файла, поэтому он является однозначным разделителем. -r не запускает команду при пустом списке, а -n 1 задаёт один путь на вызов.
Частый вопрос
Почему нельзя просто обернуть find в кавычки?
Кавычки защищают аргумент find, но не превращают его текстовый вывод в безопасный список путей. Для произвольных имён используйте NUL-разделитель.