Гид по технологиям

grep: ограничить поиск по расширениям и альтернатива find

• 4 min read • Linux • Обновлено 18 Nov 2025
grep: поиск по расширениям и альтернатива find
grep: поиск по расширениям и альтернатива find

Быстрые ссылки

  • Включать только определённые файлы в поиск grep

  • Использовать find вместо grep

Bash: пример командной строки с grep

Включать только определённые файлы в поиск grep

По умолчанию рекурсивный grep с флагом

-r

просматривает все файлы в папке и её подкаталогах. Чтобы ограничить набор файлов по шаблону, используйте флаг

--include

–include заставляет grep учитывать только файлы, совпадающие с паттерном. Несколько –include интерпретируются как белый список.

Пример: найти слово “foo” только в текстовых файлах с расширением .txt, игнорируя регистр и включая номера строк:

grep -inr --include \*.txt "foo" ~/folder

Иллюстрация: паттерны и включение файлов для grep

Примечание: в примере звёздочка экранирована обратным слэшем \, потому что может встречаться в именах файлов или интерпретироваться оболочкой. Другой способ — заключить шаблон в кавычки:

grep -inr --include="*.txt" "foo" ~/folder

Вы можете указать несколько флагов –include, например для HTML, JS и CSS:

grep -inr --include \*.html --include \*.css --include \*.js "foo" ~/folder

Чтобы исключить файлы по шаблону (чёрный список), используйте –exclude:

grep -inr --exclude \*.log "foo" ~/folder

И чтобы исключить целые каталоги:

grep -inr --exclude-dir config "foo" ~/folder

Важно: grep рекурсивно просматривает только текстовые файлы по умолчанию. Для поиска внутри бинарных файлов используйте флаги –binary-files=text или -a, но это может снизить производительность.

Важно: если в проекте есть скрытые папки (например, .git), добавьте –exclude-dir=.git, чтобы избежать лишних результатов и ускорить поиск.

Когда grep –include может не подойти

  • Если нужно фильтровать по дате изменения, размеру или атрибутам — grep не умеет этого. Используйте find.
  • В больших деревьях с тысячами файлов grep рекурсивный может быть медленным без явного исключения директорий.
  • Если имена файлов содержат специальные символы, используйте -print0 и xargs -0 в комбинации с find.

Скриншот результатов поиска и вывод ошибок

Использование find вместо grep

find умеет фильтровать файлы по маске, дате, размеру, правам и другим метаданным. Затем список файлов можно передать в grep через xargs или -exec.

Пример с безопасной передачей имени файла (поддерживает пробелы и спецсимволы):

find ./ -type f -iname "*.txt" -print0 | xargs -0 grep "foo"

Альтернатива с -exec (меньше процессов, более портативно):

find ./ -type f -iname "*.txt" -exec grep -Hn "foo" {} +

Примеры фильтров find:

  • По дате: -mtime -7 — файлы, изменённые за последние 7 дней.
  • По размеру: -size +1M — файлы больше 1 мегабайта.
  • По правам: -perm /u=x — файлы с указанными правами.

Советы по производительности и надёжности

  • Исключайте крупные каталоги с помощью –exclude-dir или -prune в find.
  • Для больших наборов файлов используйте -print0 + xargs -0 или -exec … {} +.
  • Для двоичных файлов либо фильтруйте по расширению, либо используйте опцию -a для grep.
  • Кавычки и экранирование: предпочтительнее оборачивать шаблоны в кавычки, чтобы оболочка не интерпретировала символы.

Быстрая шпаргалка (cheat sheet)

  • grep по расширению:
grep -inr --include="*.js" "TODO" ~/project
  • Исключить логи и .git:
grep -inr --exclude="*.log" --exclude-dir=.git "password" ~/project
  • find + grep по дате и размеру:
find . -type f -mtime -30 -size -500k -print0 | xargs -0 grep -n "FIXME"

Режимы зрелости и альтернативы

  • Быстрое локальное сканирование: grep с –include/–exclude.
  • Глубокая фильтрация по метаданным: find + grep.
  • Для кросс-платформенных задач или сложной индексации рассмотрите ripgrep (rg) — он быстрее и имеет поддержку исключений через .gitignore.

Рольные чек-листы

Для разработчика:

  • Определите расширения исходников.
  • Используйте –include для ускорения.

Для DevOps/админа:

  • Добавьте –exclude-dir для директорий с большими артефактами.
  • Автоматизируйте индексирование через cron или CI.

Для профессионалов безопасности:

  • Ищите ключи/пароли в известных паттернах.
  • Исключайте публичные сборки и бинарники.

Критерии приёмки

  • Поиск возвращает только файлы с нужными расширениями.
  • Поиск не проходит через .git и node_modules по умолчанию.
  • Результат содержит строки с номерами строк (-n).

Краткое резюме

Используйте –include/–exclude/–exclude-dir для быстрой фильтрации с grep. Если нужна фильтрация по метаданным или безопасная обработка имён файлов с пробелами — применяйте find с -print0 и xargs -0 или -exec. Для больших проектов рассмотрите специализированные инструменты, такие как ripgrep.

Краткие заметки:

  • Important: всегда тестируйте паттерны на небольшом наборе данных перед запуском на всём дереве.

1‑строчный глоссарий:

  • glob: шаблон совпадения имён файлов, например *.txt.
  • -print0 / xargs -0: безопасная передача имён файлов с нулевым байтом.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро