Утилиты CLI: команда xargs как дополнение find
А пока -- об ограничении возможностей столь замечательной сцепки команды find
с опцией действия -exec
(распространяющиеся и на опцию -ok
). Оно достаточно очевидно: вызываемая любой из этих опций команда выполняется в рамках самостоятельного процесса, что на слабых машинах, как говорят, приводит к падению производительности (должен заметить, что на машинах современных заметить этого практически невозможно).
Тем не менее, ситуация вполне разрешима. И сделать это призвана команда xargs
. Она определяется как построитель и исполнитель командной строки со стандартного ввода. А поскольку на стандартный ввод может быть направлен вывод команды find
-- xargs
воспримет результаты ее работы как аргументы какой-либо команды, которую, в свою очередь, можно рассматривать как аргумент ее самоё (по умолчанию такой командой-аргументом является /bin/echo
).
Использование команды xargs
не связано с созданием изобилия процессов (дополнительный процесс создается только для нее самой). Однако она имеет другое ограничение -- лимит на максимальную длину командной строки. Во всех BSD-системах, которые мне довелось видеть, этот лимит составляет 65536, что определяется командой следующего вида:
$ sysctl -a | grep kern.argmax
И способы изменить этот лимит мне не известны -- был бы благодарен за соответствующую информацию.
Содержание . .