Як знайти всі файли, що містять певний текст у 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) можна додати, щоб просто вказати ім'я відповідного файлу.
Також можна використовувати, --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
.