Вирішено Як знайти всі файли, що містять певний текст у Linux?

Alex Alex · 26 · 1

Я намагаюся знайти спосіб просканувати всю мою систему Linux на наявність усіх файлів, що містять певний рядок тексту. Тільки для уточнення, я шукаю текст у файлі, а не в його назві.

Коли я шукав, як це зробити, я двічі стикався з цим рішенням:

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

Однак це не працює. Здається, відображається кожен файл у системі.

Відповіді на питання

Виконайте наступне:

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

Також можна використовувати, --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.


Для відповіді на запитання необхідно авторизуватись

Війти / Зареєструватися