Подтвердить что ты не робот

Найти все файлы, соответствующие 'name' в системе linux, и искать с ними для 'text'

Мне нужно найти все экземпляры "filename.ext" в системе Linux и посмотреть, какие из них содержат текст "lookfor".

Есть ли набор операций командной строки linux, которые будут работать?

4b9b3361

Ответ 1

find / -type f -name filename.ext -exec grep -l 'lookingfor' {} +

Использование + для завершения команды более эффективно, чем \;, потому что 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

Перейдите в соответствующий каталог и введите следующую команду.

найти. -name "*.ext" | xargs grep 'Lookingfor'

Ответ 3

Более простой был бы,

find / -type f -name filename.ext -print0 | xargs -0 grep  'lookingfor'

-print0 для поиска и от 0 до xargs уменьшит проблему большого количества файлов в одном каталоге.

Ответ 4

Try:

find / -type f -name filename.ext -exec grep -H -n 'lookingfor' {} \;

find ищет рекурсивно, начиная с корня / для файлов с именем filename.ext, и для каждого найденного вхождения он запускает grep по имени файла, ищущему для lookingfor, и, если найден, печатает номер строки (-n) и имя файла (-H).

Ответ 5

Я нахожу следующую команду самым простым способом:

grep -R --include="filename.ext" lookingfor

или добавить -i для поиска нечувствительности к регистру:

grep -i -R --include="filename.ext" lookingfor