Как найти определенный текст в файлах с определенным расширением?

Допустим, я ищу все файлы с .log расширение, содержащее текст abc,

При поиске файлов с любым расширением будет выглядеть (Ссылка: /questions/130989/kak-vklyuchit-postoyannuyu-optsiyu-v-sozdatele-diska/131012#131012)

find / -xdev -type f -print0 | xargs -0 grep -H "abc"

Как мы могли бы изменить это так, что он будет искать только файлы с .log расширение?

Я буду более чем счастлив, если вы покажете лучшую команду.

1 ответ

Решение

TL;DR

добавлять -iname "*.log" после / на ваш find команда. Обратитесь к странице руководства для получения дополнительной информации

Более подробный ответ

Задача под рукой заключается в следующем:

  1. Список файлов, которые соответствуют шаблону *.log
  2. казнить grep для каждого файла, чтобы найти, содержит ли он определенную строку.
  3. Перечислите имя файла, у которого есть совпадение на stdout

Пример того, как это можно сделать, можно увидеть ниже:

$ find /var/log -iname "*.log" -exec grep -l 'wlan' {} \+                      

По сути, в игре есть 3 вещи:

  • find выполняет работу по поиску файлов и вызову grep за список имен файлов в -exec ...{} \+ структура, где {} будет заменен всеми найденными именами файлов.
  • -iname "*.log" может обеспечить совпадение имен файлов без учета регистра
  • -exec . . .{} \+ называет низкий уровень execve функция, которая будет порождать grep -l со списком всех файлов, найденных перед ним (вместо {}).
  • \+ это опция, которая указывает для execve упаковать как можно больше файлов перед grep (предел устанавливается ARG_MAX переменная, специфичная для execи для Ubuntu на 2097152 как может быть показано getconf ARG_MAX команда). Как только предел достигнут, exec будет повторять звонок grep с большим количеством файлов, упакованных в качестве аргументов. \ необходимо обеспечить + интерпретируется как аргумент find а не как другая команда оболочки.
  • -l опция или grep показывает файлы с соответствующей строкой. -L будет соответствовать файлам без строки.
Другие вопросы по тегам