Обработка результатов навалом
Для повышения эффективности многие люди используют xargs
для обработки результатов навалом, но это очень опасно.Из-за этого в find
был добавлен альтернативный метод, который выполняет массовые результаты.
Обратите внимание, что этот метод может идти с некоторыми оговорками, как, например, требование в POSIX- find
иметь {}
в конце команды.
export -f dosomething
find . -exec bash -c 'for f; do dosomething "$f"; done' _ {} +
find
передаст много результатов в качестве аргументов для одного вызова bash
, и for
-loop выполняет итерацию этих аргументов, выполняя функцию dosomething
для каждого из них.
Приведенное выше решение запускает аргументыв $1
, поэтому существует _
(который представляет $0
).
Обработка результатов по одному
Таким же образом, я думаю, что принятый верхответ должен быть исправлен, чтобы быть
export -f dosomething
find . -exec bash -c 'dosomething "$1"' _ {} \;
Это не только более разумно, потому что аргументы всегда должны начинаться с $1
, но также использование $0
может привести к неожиданному поведению, если имя файла, возвращаемое find
имеет особое значение для оболочки.