Использование + для завершения команды более эффективно, чем \;, потому что find отправляет целую партию файлов в grep вместо отправки по одному. Это позволяет избежать fork/exec для каждого найденного файла.
Некоторое время назад я провел некоторое тестирование, чтобы сравнить производительность xargs vs {} + vs {} \;, и я обнаружил, что {} + работает быстрее. Вот некоторые из моих результатов:
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
Ответ 2
Перейдите в соответствующий каталог и введите следующую команду.
find ищет рекурсивно, начиная с корня / для файлов с именем filename.ext, и для каждого найденного вхождения он запускает grep по имени файла, ищущему для lookingfor, и, если найден, печатает номер строки (-n) и имя файла (-H).
Ответ 5
Я нахожу следующую команду самым простым способом:
grep -R --include="filename.ext" lookingfor
или добавить -i для поиска нечувствительности к регистру: