Урок 7Инструменты

Поиск и навигация

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 — поиск файлов

Glob использует паттерны для поиска файлов. Результаты сортируются по времени изменения:

ПаттернОписание
**/*.tsВсе TypeScript файлы
src/**/*.tsxВсе TSX файлы в src/
**/test/*.spec.tsВсе spec файлы в папках test
*.config.{js,ts}Все конфиг файлы в корне
!**/node_modules/**Исключить node_modules
> Найди все React компоненты
Glob: src/**/*.tsx
Найдено 47 файлов:
src/components/Button.tsx
src/components/Header.tsx
src/pages/Home.tsx
...
Grep — поиск по содержимому

Grep ищет текст или regex внутри файлов. Построен на ripgrep (rg) для скорости:

function.*asyncНайти async функцииregex
TODO|FIXME|HACKНайти комментарии-маркерыregex
import.*from.*reactНайти React импортыregex
console\.logНайти отладочные логиliteral
> Найди все TODO комментарии
Grep: pattern="TODO", output_mode="content"
src/auth.ts:42: // TODO: add rate limiting
src/api.ts:15: // TODO: handle errors
src/utils.ts:88: // TODO: refactor this

Режимы вывода

  • contentстроки с совпадениями
  • files_with_matchesтолько пути файлов
  • countколичество совпадений

Полезные опции

  • -iбез учёта регистра
  • -C 33 строки контекста
  • glob="*.ts"фильтр файлов
Комбинирование инструментов

Claude автоматически комбинирует Glob и Grep для сложных запросов:

> Найди где в компонентах используется useState
1. Glob: src/components/**/*.tsx
2. Grep: pattern="useState", glob="*.tsx"
Найдено в 12 компонентах:
src/components/Form.tsx:8
src/components/Modal.tsx:5
...
Стратегии поиска

Найти файл по имени

Glob
> Найди все файлы с именем auth

Паттерн: **/auth*

Найти использование функции

Grep
> Где используется функция validateUser?

Паттерн: validateUser

Найти определение класса

Grep
> Найди где определён класс UserService

Паттерн: 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" (быстро понять, где встречается символ).

Квиз по уроку

1 из 1

1.В чём разница между инструментами Glob и Grep в Claude Code?

Этот урок — часть структурированного курса по LLM.

Мой путь обучения