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

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

При поиске файлов с любым расширением будет выглядеть (Ref .: https://unix.stackexchange.com/a/16140/38353 )

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

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

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

1
задан 13 April 2017 в 15:37

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" может обеспечить соответствие случая-insensetive имен файлов
  • -exec . . .{} \+ называет низкий уровень execve функция, которая будет метать икру grep -l со списком всех файлов, найденных перед ним (вместо {} ).
  • \+ опция, которая указывает для execve упаковать максимально любые файлы перед grep (предел устанавливается ARG_MAX переменная, характерно для exec, и поскольку Ubuntu в 2097152 как можно показать getconf ARG_MAX команда). После того как предел достигнут, exec повторит вызов к grep с большим количеством файлов, упакованных как аргументы. \ необходимо для обеспечения + интерпретируется как аргумент find и не как другая команда оболочки.
  • -l опция или grep показывают файлы с совпавшей строкой. -L соответствовал бы файлам без строки.
3
ответ дан 14 April 2017 в 01:37
  • 1
    @AliOuld можно ли скопировать весь текст от терминала, начинающего со строки, которая показывает подсказку команды, которую Вы выполнили, полностью вниз к последнему знаку текста, показанного на терминале, и вставляют его в Ваш вопрос? There' s никакой хороший способ выяснить то, что имена или какой проблемой является просто неполная информация в комментариях как это. Существуют другие подходы - например, можно попытаться перетащить каталоги от файлового браузера в терминал, если терминал поддерживает его, I' ll добавляют, что - но если Вы разворачиваете свой вопрос тогда, должно быть возможно знать то, что будет, вероятно, работать. – Eliah Kagan 24 August 2017 в 13:05

Другие вопросы по тегам:

Похожие вопросы: