Современная версия
POSIX 2008 добавил маркер +
к find
, что означает, что теперь он автоматически группирует столько файлов, сколько целесообразно, в одно выполнение команды, очень похоже на xargs
, но с ряд преимуществ:
- Вам не нужно беспокоиться о нечетных символах в именах файлов.
- Вам не нужно беспокоиться о том, что команда вызывается с нулевыми именами файлов.
Проблема с именем файла - это проблема с xargs
без опции -0
, а проблема «даже с нулевыми именами файлов» - с или без опции -0
, но GNU xargs
имеет опция -r
или --no-run-if-empty
, чтобы предотвратить это. Кроме того, эта запись сокращает количество процессов, а не то, что вы, скорее всего, будете измерять разницу в производительности. Следовательно, вы могли бы разумно написать:
find . -exec grep something {} +
Классическая версия
find . -print | xargs grep something
Если вы работаете в Linux или у вас есть команды GNU find
и xargs
, используйте -print0
с find
и -0
с xargs
для обработки имен файлов, содержащих пробелы и другие нечетные символы символы.
find . -print0 | xargs -0 grep something
Настройка результатов от grep
Если вам не нужны имена файлов (только текст), добавьте соответствующую опцию к grep
(обычно -h
для подавления «заголовков»). Чтобы абсолютно гарантировать, что имя файла напечатано с помощью grep
(даже если найден только один файл или при последнем вызове grep
дается только 1 имя файла), добавьте /dev/null
в командную строку xargs
, чтобы всегда было как минимум два имени файла.