Я думаю, что это распространенные способы передачи результата одной команды следующей в качестве входных данных.
Как работают эти три? Или какие веб-сайты /URL-адреса?
Я думаю, что это распространенные способы передачи результата одной команды следующей в качестве входных данных.
Как работают эти три? Или какие веб-сайты /URL-адреса?
Первые вещи, чтобы напечатать:
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
Обратите внимание, что xargs больше не нужен для текущих реализаций поиска, которые, вероятно, все поддерживают этот синтаксис POSIX:
find directory -name '*.txt' -exec ls -l {} +
что проще и немного быстрее, чем вариант xargs.
find directory -name '*.txt' | xargs ls -l