[Resolved] Как мне найти все файлы, содержащие определенный текст в Linux?

Вопрос:

Я пытаюсь найти способ просканировать всю мою систему Linux на предмет всех файлов, содержащих определенную строку текста. Чтобы уточнить, я ищу текст внутри файла, а не в имени файла.

Когда я искал, как это сделать, я дважды наткнулся на это решение:

find / -type f -exec grep -H "text-to-find-here' {} ;

Однако это не работает. Кажется, отображает каждый файл в системе.

Это близко к правильному способу сделать это? Если нет, то как мне? Эта способность находить текстовые строки в файлах была бы чрезвычайно полезна для некоторых программных проектов, над которыми я работаю.

Отвечать:

Способ # 1

Сделайте следующее:

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r или -R рекурсивно,
  • -n номер строки, а
  • -w означает соответствие всему слову.
  • -l (L в нижнем регистре) можно добавить, чтобы просто указать имя файла для совпадающих файлов.
  • -e шаблон, используемый во время поиска

Наряду с этим, --exclude, --include, --exclude-dir флаги могут использоваться для эффективного поиска:

  • Это будет искать только те файлы, которые имеют расширения .c или .h:
grep --include=*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
  • Это исключит поиск всех файлов с расширением .o:
grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
  • Для каталогов можно исключить один или несколько каталогов, используя --exclude-dir параметр. Например, это исключит каталоги dir1 /, dir2 / и все они, соответствующие * .dst /:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"

Это очень хорошо работает для меня, достигая почти той же цели, что и ваша.

Для получения дополнительных опций проверьте man grep.

Способ # 2

Вы можете использовать grep -ilR:

grep -Ril "text-to-find-here" /
  • i означает игнорировать регистр (в вашем случае необязательно).
  • R означает рекурсивный.
  • l означает «показывать имя файла, а не сам результат».
  • / означает запуск из корневого каталога вашей машины.

Способ # 3

Вы можете использовать ack. Это похоже на grep для исходного кода. С его помощью вы можете сканировать всю файловую систему.

ack 'text-to-find-here'

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *