#linux
Хотелось бы найти способ поиска всех файлов, которые содержат заданный текст. Именно текст внутри файлов, а не в названиях. Встречается такое решение: find / -type f -exec grep -H 'текстДляПоиска' {} \; Однако оно работает достаточно криво, как правильно это сделать? Перевод "How to find all files containing specific text on Linux?"
Ответы
Ответ 1
Делайте так: grep -rnw '/путь/к/папке/с/файлами' -e "шаблон" -r или -R - рекурсивный поиск. -n - вывод номера строки. -w - только целые слова. -l (нижний регистр от L) - вывод имени файла, где было совпадение. Эффективности добавят следующие флаги: --exclude - Шаблон для исключения файлов, например: поиск везде, кроме файлов с расширением .o: grep --exclude=*.o -rnw '/путь/к/папке/с/файлами' -e "шаблон" --include - Поиск только в определённых файлах, например: только в файлах с расширениями .h и .c: grep --include=\*.{c,h} -rnw '/путь/к/папке/с/файлами' -e "шаблон" --exclude-dir и --include-dir - то же, только для выборки директорий, например: исключить папки один, two и любые, начинающиеся на а: grep --exclude-dir={один,two,а*} -rnw '/путь/к/папке/с/файлами' -e "шаблон" Это отлично работает для подобных целей, остальные настройки для grep можно узнать, выполнив man grep, удачи!
Комментариев нет:
Отправить комментарий