Команда cat
не работает ни с чем; он работает на стандартном вводе, пока не будет сказано, что ввод окончен. Как отмечает Rampion, команда cat
здесь не нужна, но она работает на своем неявном входе (стандартном вводе), а не на ничем.
Команда xargs
считывает выходные данные из cat
и группирует информацию в аргументы в команду man
, указанную в качестве ее (единственного) аргумента. Когда он достигает предела (настраивается в командной строке), он выполняет команду man
.
Идиома find ... -print0 | xargs -0 ...
имеет дело с именами файлов, которые содержат неуклюжие символы, такие как пробелы, символы табуляции и новые строки. Команда find
печатает каждое имя файла, за которым следует ASCII NUL ('\0'
); это один из двух символов, которые не могут отображаться в простом имени файла, другой - «/» (конечно, в именах путей, но не в простых именах файлов). Это не прямо соответствует последовательности, которую вы предоставляете; xargs
группирует наборы имен файлов в один список аргументов, вплоть до ограничения по размеру. Если имена достаточно короткие (обычно они есть), тогда число выполнений grep
будет меньше, чем имен файлов.
Также обратите внимание, что grep
печатает только имя файла, в котором найден материал, если у него есть несколько файлов для поиска - или если он поддерживает параметр, так что он всегда печатает имена файлов, и параметр имеет значение used: '-H
' - это расширение GNU для grep
, которое делает это. Переносимый способ гарантировать, что имена файлов всегда появляются, состоит в том, чтобы перечислить /dev/null
в качестве первого файла (например, 'xargs grep something /dev/null
'); поиск /dev/null
.
не займет много времени