Я думаю, что это распространенные способы передачи результата одной команды следующей в качестве входных данных.
Как работают эти три? Или какие веб-сайты / 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
Смотрите следующие статьи:
Linux и Unix найти руководство по командам с примерами
xargs: как управлять и использовать аргументы командной строки
источник