grep: ограничить поиск по расширениям и альтернатива find
Быстрые ссылки
Включать только определённые файлы в поиск grep
Использовать find вместо grep

Включать только определённые файлы в поиск grep
По умолчанию рекурсивный grep с флагом
-rпросматривает все файлы в папке и её подкаталогах. Чтобы ограничить набор файлов по шаблону, используйте флаг
--include–include заставляет grep учитывать только файлы, совпадающие с паттерном. Несколько –include интерпретируются как белый список.
Пример: найти слово “foo” только в текстовых файлах с расширением .txt, игнорируя регистр и включая номера строк:
grep -inr --include \*.txt "foo" ~/folder
Примечание: в примере звёздочка экранирована обратным слэшем \, потому что может встречаться в именах файлов или интерпретироваться оболочкой. Другой способ — заключить шаблон в кавычки:
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: безопасная передача имён файлов с нулевым байтом.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента