С GNU find
легко подключиться к xargs
. Типичный (бесполезный) пример:
find /var/log -name "*.log" | xargs dirname
Это возвращает все имена каталогов, содержащих некоторый файл журнала.
Эта же команда с BSD find
не работает, заканчиваясь:
usage: dirname path
То есть xargs
не может передать записи списка файлов dirname
.
На странице руководства BSD find
упоминаются параметры -exec
и -execdir
, в которых говорится: «Это поведение похоже на поведение xargs (1)».
-exec утилита [аргумент ...] {} + То же, что и -exec, за исключением того, что ``{}'' заменяется как можно большим количеством путей для каждого вызова утилиты. Это поведение похоже на поведение xargs(1).
-execdir утилита [аргумент ...] {} + То же, что и -execdir, за исключением того, что ``{}'' заменяется как можно большим количеством путей для каждого вызова утилиты. Это поведение похоже на поведение xargs(1).
Каждый раз, когда я возвращаюсь к этим двум флагам, мне приходится снова читать документацию. Кажется, я не могу вспомнить их использование! Кроме того, меня беспокоит переносимость сценариев между системами GNU/BSD, в основном Linux, Open/FreeBSD и MacOS.
Любой способ передать BSD find
в xargs
, или -exec
действительно единственный вариант?