


Пробел внутри имени файла не должен превращаться в границу двух аргументов. Для связки GNU find и GNU xargs используйте разделитель NUL: find -print0 и xargs -0. В примере Mentoring.digital команда будет считать строки, не меняя файлы.
По умолчанию xargs разбирает вход с учётом пробельных разделителей, кавычек и обратной косой черты. Имя report draft.txt может быть воспринято как несколько частей. Перевод строки в имени тоже создаёт проблему для построчного списка.
Кавычки вокруг шаблона find защищают его от обработки оболочкой, но не добавляют безопасные границы имён в выходной поток. Решение должно быть согласовано с обеих сторон конвейера.
find ./samples -type f -name '*.txt' -print0 | xargs -0 -r wc -l --
Команда ищет обычные текстовые файлы в учебном каталоге samples. Print0 завершает каждое имя нулевым байтом. Опция -0 у xargs ожидает именно такой формат и воспринимает остальные символы имени буквально.
Опция -r у GNU xargs запрещает запуск команды при пустом входе. Для wc вызов без файлов имеет другой смысл и может читать стандартный ввод. Разделитель -- завершает разбор опций wc перед добавленными именами.
Уточняйте реализацию инструментов. В статье рассматривается GNU xargs на Linux. Наличие и поведение отдельных параметров в других системах нужно сверять отдельно.
Создайте в отдельном временном каталоге небольшие файлы, один с пробелом в имени. Начните с команды чтения вроде wc и убедитесь, что имя не разделилось. Повторите поиск с маской, которая ничего не находит.
Xargs может разбить большой список на несколько запусков из-за ограничений размера командной строки. Поэтому строки total у wc могут относиться к отдельным пачкам, а не ко всему дереву. Для одного общего показателя нужен отдельный этап агрегации.
Не заменяйте учебную команду чтения на удаление до проверки каталога и критериев поиска. Формат NUL защищает границы имён, но не исправляет неверный путь или ошибочное условие отбора.
Задание: отдельно проверьте пустую выборку, имя с пробелом и имя с кавычкой. Объясните, какой компонент формирует разделитель, а какой его читает. Такие цепочки можно освоить на курсе DevOps и разобрать с наставником по Linux и DevOps.