Использование подстановочных символов и шаблонов glob

ShellBeginner
Практиковаться сейчас

Введение

Представьте, что у вас есть неубранная комната с сотнями разбросанных листов бумаги.

  • Некоторые из них — домашние задания (math_hw.txt, english_hw.txt).
  • Некоторые — фотографии (pic1.png, pic2.png).
  • Некоторые — мусор (temp_1, temp_2).

Если вы хотите сложить все фотографии в одну коробку, необязательно поднимать их по одной. Вы говорите: «Подними всё, что похоже на фотографию».

В Linux для этого используются подстановочные символы (их также называют шаблонами glob). Они похожи на джокеры в карточной колоде — могут заменять другие символы.

Эта возможность позволяет работать с шаблонами, а не с отдельными именами. В реальных системах могут находиться десятки, сотни или тысячи подходящих файлов. Выбор по шаблону — одна из причин, по которым работа в оболочке хорошо масштабируется.

В этой лабораторной работе вы изучите два мощных символа:

  1. Звёздочка (*): обозначает любое количество символов.
  2. Вопросительный знак (?): обозначает ровно один символ.

Выбор нескольких файлов (*)

Звёздочка * — самый известный подстановочный символ. Она означает: «сопоставить любое количество символов, включая ноль».

Посмотрим, что находится в нашей неубранной папке:

ls

Команда выведет список файлов. Представим, что теперь нужно вывести только текстовые файлы — файлы, имена которых заканчиваются на .txt.

Вместо того чтобы вводить ls notes.txt readme.txt report.txt, достаточно ввести *.txt.

Это означает: «найти любой файл, имя которого заканчивается на .txt».

ls *.txt

Вывод:

notes.txt  readme.txt  report.txt

Оболочка обработала шаблон *.txt, развернула его в список всех текстовых файлов и не включила image.png и другие файлы. Так вы отфильтровали список.

В этом примере есть важная особенность: оболочка разворачивает шаблон до запуска команды ls. Иными словами, ls обычно получает уже готовый список имён файлов, а не исходный шаблон *.txt. Поэтому подстановочные символы работают со множеством разных команд.

Перемещение файлов с помощью *

Теперь выполним полезную операцию. У нас есть несколько файлов с данными: data_2025.csv, data_2024.csv, data_old.log.

Нужно навести порядок и переместить все файлы, имена которых начинаются с data_, в папку резервных копий.

Сначала создайте эту папку:

mkdir backup

Теперь используйте подстановочный символ, чтобы переместить все подходящие файлы одной командой. Шаблон data_* соответствует любому имени, начинающемуся с data_.

mv data_* backup/

Этой командой мы сказали Linux: «Если имя начинается с data_, перемести файл в папку резервных копий».

Именно здесь подстановочные символы особенно полезны. Вместо повторного выполнения команды для каждого файла вы один раз задаёте правило имени, а оболочка сама разворачивает шаблон.

Убедитесь, что файлы исчезли из текущего каталога:

ls

Затем проверьте, что они успешно перемещены:

ls backup

Готово! Одной командой вы переместили три файла.

Выбор одного символа (?)

Звёздочка * жадная — она соответствует всему. Иногда требуется более точное сопоставление.

Подстановочный символ «вопросительный знак» ? соответствует ровно одному символу.

Поэтому ? точнее, чем *. Он полезен, когда имена файлов имеют предсказуемый формат и вы хотите избежать случайного выбора более длинных имён.

У нас есть файлы с именами temp_1, temp_2 и temp_a.

  • temp_* будет соответствовать temp_1 И temp_very_long_name.
  • temp_? соответствует имени только в том случае, если после символа подчёркивания находится ровно один символ.

Перед удалением проверим шаблон — это всегда хорошая привычка:

ls temp_?

Совпадения: temp_1, temp_2, temp_a.

Теперь, когда мы убедились в результате, удалим эти файлы:

rm temp_?

Убедитесь, что они удалены:

ls

Такой способ очень удобен для выбора файлов с определённой структурой имени.

Не забывайте о важном правиле безопасности: перед использованием шаблона с rm или mv сначала проверьте его с помощью неразрушающей команды, например ls. Сопоставление по шаблону — мощный инструмент, поэтому перед выполнением операции полезно просмотреть выбранные файлы.

Итоги

Теперь вы умеете использовать сопоставление по шаблону.

  • * (звёздочка): подстановочный символ «сопоставить всё». Подходит для выбора всех файлов определённого типа (*.png) или всех файлов одной серии (day_*).
  • ? (вопросительный знак): подстановочный символ «один символ». Подходит для точного сопоставления (file_?.txt).

На этом завершается модуль 2. Теперь вы умеете:

  1. Перемещаться по дереву файлов (pwd, cd, ls).
  2. Создавать файлы и каталоги (touch, mkdir).
  3. Копировать и перемещать их (cp, mv).
  4. Удалять их (rm, rmdir).
  5. Выбирать их группами (*, ?).

Вы готовы к модулю 3, где мы откроем эти файлы и научимся читать и редактировать содержащийся в них текст.