find / -type f -name filename.ext -exec grep -l 'lookingfor' {} +
Использование +
для завершения команды более эффективно, чем \;
, поскольку find
отправляет целый пакет файлов на grep
вместо отправки их один за другим.Это позволяет избежать форка / exec для каждого найденного файла.
Некоторое время назад я провел некоторое тестирование для сравнения производительности xargs
против {} +
против {} \;
и обнаружил, что {} +
было быстрееВот некоторые из моих результатов:
time find . -name "*20090430*" -exec touch {} +
real 0m31.98s
user 0m0.06s
sys 0m0.49s
time find . -name "*20090430*" | xargs touch
real 1m8.81s
user 0m0.13s
sys 0m1.07s
time find . -name "*20090430*" -exec touch {} \;
real 1m42.53s
user 0m0.17s
sys 0m2.42s