Поиск и навигация
Glob, Grep, паттерны
Как Claude Code находит код в проекте
Прежде чем редактировать код, агенту нужно понять, что вообще лежит в проекте. Для этого Claude Code использует два дополняющих друг друга инструмента поиска: Glob ищет файлы по имени и пути, а Grep ищет текст внутри файлов. Это не одно и то же: Glob отвечает на вопрос «где лежат нужные файлы?», а Grep — на вопрос «в каких файлах встречается вот эта строка или шаблон (regex)?». Агент сам решает, какой инструмент применить, и часто запускает их по очереди, не заставляя вас вручную перебирать директории.
Шаблоны Glob на этой странице — это привычные glob-выражения. Запись **/*.ts означает «любой файл с расширением .ts на любой глубине вложенности»; двойная звёздка ** раскрывается в произвольное число подпапок, а фигурные скобки {js,ts} перечисляют альтернативы. Восклицательный знак в начале (например !**/node_modules/**) исключает каталог из выдачи. Результаты Glob возвращаются отсортированными по времени изменения, поэтому свежие файлы оказываются наверху — это удобно, когда ищешь то, что недавно правили.
Glob и Grep: разделение труда
Grep построен на ripgrep (rg) — очень быстром поисковике по регулярным выражениям, который уважает .gitignore и пропускает бинарные файлы. Английские блоки на этой странице показывают типовые шаблоны: function.*async находит объявления асинхронных функций, TODO|FIXME|HACK собирает все маркеры-напоминания, а console\.log ловит отладочные вызовы (точка экранирована, чтобы означать буквальную точку, а не «любой символ»). Параметр output_mode управляет тем, что вернётся: content — сами строки с совпадениями, files_with_matches — только пути файлов (быстрее всего для первичного обзора), count — число совпадений. Флаг -i отключает учёт регистра, -C 3 добавляет по три строки контекста вокруг находки, а glob="*.ts" сужает поиск до нужного типа файлов.
Конкретный пример
Допустим, вы просите: «найди, где в компонентах используется useState». Агент сначала применит Glob (src/components/**/*.tsx), чтобы очертить множество компонентов, а затем Grep с фильтром glob="*.tsx" по строке useState — и вернёт список файлов с номерами строк. Главные ошибки новичков: искать regex там, где достаточно простой строки (и наоборот — забыть экранировать спецсимволы вроде ., (, {); запускать Grep без фильтра по проекту с тысячами файлов вместо files_with_matches; и забывать, что для исследования незнакомой кодовой базы лучше делегировать поиск суб-агенту через Task с агентом Explore, чтобы не засорять основной контекст.
Glob
Поиск файлов по паттернам. Быстро находит файлы по имени, расширению, пути.
Grep
Поиск по содержимому файлов. Поддерживает regex, фильтры, контекст.
Glob использует паттерны для поиска файлов. Результаты сортируются по времени изменения:
| Паттерн | Описание |
|---|---|
**/*.ts | Все TypeScript файлы |
src/**/*.tsx | Все TSX файлы в src/ |
**/test/*.spec.ts | Все spec файлы в папках test |
*.config.{js,ts} | Все конфиг файлы в корне |
!**/node_modules/** | Исключить node_modules |
src/components/Button.tsx
src/components/Header.tsx
src/pages/Home.tsx
...
Grep ищет текст или regex внутри файлов. Построен на ripgrep (rg) для скорости:
function.*asyncНайти async функцииregexTODO|FIXME|HACKНайти комментарии-маркерыregeximport.*from.*reactНайти React импортыregexconsole\.logНайти отладочные логиliteralsrc/api.ts:15: // TODO: handle errors
src/utils.ts:88: // TODO: refactor this
Режимы вывода
content— строки с совпадениямиfiles_with_matches— только пути файловcount— количество совпадений
Полезные опции
-i— без учёта регистра-C 3— 3 строки контекстаglob="*.ts"— фильтр файлов
Claude автоматически комбинирует Glob и Grep для сложных запросов:
2. Grep: pattern="useState", glob="*.tsx"
src/components/Form.tsx:8
src/components/Modal.tsx:5
...
Найти файл по имени
GlobПаттерн: **/auth*
Найти использование функции
GrepПаттерн: validateUser
Найти определение класса
GrepПаттерн: class UserService
Исследовать структуру
Task + ExploreПаттерн: Используется суб-агент
Советы по поиску
- •Для исследования незнакомого codebase используйте Task с агентом Explore
- •Grep с output_mode="files_with_matches" быстрее для первичного поиска
- •Используйте -C для контекста вокруг найденных строк
- •Экранируйте спецсимволы в regex: \{\} для литералов
Частые вопросы
Чем отличается Glob от Grep в Claude Code?
Glob ищет файлы по имени и пути (например, src/**/*.tsx — все TSX-файлы в src), а Grep ищет текст или regex внутри файлов. Glob отвечает на вопрос «где лежат нужные файлы?», Grep — «в каких файлах встречается эта строка?». Агент часто комбинирует их: сначала Glob очерчивает множество файлов, затем Grep ищет внутри них.
Как искать по содержимому файлов в Claude Code?
Используйте инструмент Grep — он построен на ripgrep (rg) и поддерживает регулярные выражения. Параметр output_mode задаёт формат: content возвращает строки с совпадениями, files_with_matches — только пути файлов (быстрее для первичного обзора), count — число совпадений. Флаг -i отключает учёт регистра, -C 3 добавляет контекст, glob="*.ts" сужает поиск до нужного типа файлов.
Что означает паттерн ** в Glob?
Двойная звёздка ** раскрывается в произвольное число вложенных подпапок. Например, **/*.ts находит любой .ts-файл на любой глубине, а src/**/*.tsx — все TSX-файлы внутри src. Фигурные скобки {js,ts} перечисляют альтернативы, а восклицательный знак в начале (!**/node_modules/**) исключает каталог из выдачи. Результаты Glob сортируются по времени изменения.
Как Claude Code исследует незнакомый проект?
Для исследования незнакомой кодовой базы лучше делегировать поиск суб-агенту через Task с агентом Explore — он соберёт структуру и архитектуру проекта, не засоряя основной контекст множеством промежуточных результатов. Для точечных задач достаточно Glob (найти файлы) и Grep с output_mode="files_with_matches" (быстро понять, где встречается символ).
Этот урок — часть структурированного курса по LLM.
Мой путь обучения