Что такое использование -exec xargs и -print0?


20

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

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

Ответы:


25

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

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 

xargs использует гораздо меньше ресурсов, чем 'find -exec'
Фелипе Альварес

7
Это наоборот. Для передачи в xargs потребуется немного больше ресурсов, чем -exec. Вы, вероятно, пропускаете терминатор "+".
2010 года

2

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

@ user5359531: битая ссылка была заменена. И я не могу воспроизвести такие объемные учебники.
harrymc
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.