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