18

Я думаю, что это распространенные способы передачи результата одной команды следующей в качестве входных данных.

Как работают эти три? Или какие веб-сайты /URL-адреса?

3 ответа3

23

Первые вещи, чтобы напечатать:

man find

man xargs

По умолчанию команда find выводит результаты в стандартный вывод, поэтому опция -print обычно не требуется, но -print0 разделяет имена файлов байтом 0 (NULL), чтобы имена, содержащие пробелы или символы новой строки, можно было правильно интерпретировать.

Опция -exec - это то, что вы можете использовать вместо xargs - команда find выполняет команду для каждого найденного элемента.

Команда xargs читает строки, разделенные пробелами или символами новой строки (обычно из команды find , но они могут быть откуда угодно) и выполняет некоторые команды для каждой строки.
Если xargs запускается с параметром -0 , он будет ожидать, что строки, разделенные NULL, будут выводиться командой find ... -print0

Преимущество xargs в том, что он может группировать строки, так что он выполняет команду только один или два раза вместо n раз.

Итак, при обычном использовании:

find start_directory -name '*.txt' | xargs ls -l 

find выдаст список имен файлов, а xargs выдаст такие команды:

ls -l file1.txt file2.txt file3.txt ... fileN.txt

что быстрее, чем выдача команды поиска:

ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt
7

Обратите внимание, что xargs больше не нужен для текущих реализаций поиска, которые, вероятно, все поддерживают этот синтаксис POSIX:

find directory -name '*.txt' -exec ls -l {} + 

что проще и немного быстрее, чем вариант xargs.

find directory -name '*.txt' | xargs ls -l 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .