# Маски имён: * и ?

Курс: Claude Code и терминал: с 0 — https://zero2claude.ru/learn/code-terminal
Канонический URL: https://zero2claude.ru/learn/code-terminal/3-5-maski

Маски «*» и «?» описывают сразу много файлов одной записью: «*.txt» — это все текстовые файлы. Как их применять.

До этого момента ты искал и открывал файлы по точному имени. Но что, если файлов десятки и нужно охватить их разом — например, «все текстовые файлы»? Перечислять каждое имя вручную утомительно. Тут на помощь приходят **маски имён**.

## Звёздочка `*` — «любая часть имени»

Знак `*` заменяет **любое число любых символов** — хоть ноль, хоть сотню. Запись `*.txt` читается так: «что угодно, а в конце `.txt`». Под неё попадут и `report.txt`, и `notes.txt`, и просто `a.txt`.

Почему это удобно? Ты описываешь не конкретный файл, а **правило**, по которому система сама подбирает все подходящие имена. Одна короткая запись — и весь набор файлов у тебя в руках.

## Знак вопроса `?` — «ровно один символ»

`?` строже: он заменяет **ровно один** любой символ — не больше и не меньше. Например, маска `file?.txt` подойдёт под `file1.txt` и `fileA.txt`, но **не** подойдёт под `file12.txt` (там два символа) и не под `file.txt` (там ни одного).

Запомни просто: `*` — «сколько угодно», `?` — «ровно один». Их можно даже смешивать: `data?.*` найдёт `data1.csv`, `data9.txt` и так далее.

## Применим маску в поиске

Маски особенно полезны вместе с командой поиска. Запиши маску в кавычках:

```
find . -name "*.txt"
```

Кавычки тут важны: без них оболочка может «раскрыть» звёздочку сама ещё до запуска команды, и поиск отработает не так, как ты ждёшь. Поэтому маску для `find` всегда берём в двойные кавычки.

## Попробуй

В папке лежат `report.txt`, `report2.txt`, `notes.md` и `data.csv`. Найди только текстовые файлы:

```
find . -name "*.txt"
```

Команда покажет `report.txt` и `report2.txt`, а `notes.md` и `data.csv` пропустит — они под маску не подходят. Подсказка под терминалом, если что.
