Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

Это магия! Как я ускорил работу с файлами в Linux в 10 раз с помощью подстановочных знаков

Наверняка вы встречали загадочные символы в командной строке и задавались вопросом: что это за магия? Это подстановочные знаки — и они действительно могут превратить работу с файлами в Linux в игру! Подстановочные знаки (они же — метасимволы) — специальные символы, которые подменяют собой один или несколько других. Они работают как джокеры в картах: берут на себя любую роль, которая вам сейчас нужна. С такими масками вы быстро получаете список файлов по шаблону, а не вручную вводите их имена. Достаточно задать нужную маску — и терминал соберёт все подходящие файлы сам. Этими масками управляет не программа, а оболочка (shell). Когда подстановочные знаки попадают в команду, оболочка разворачивает их в список файлов, а программе передаёт уже обычные имена — без спецсимволов. В каждой оболочке есть свой набор символов, но самые популярные — поиск по одному символу или по целой группе — работают почти везде. Например, в zsh такие маски продвинуты настолько, что эту оболочку любят бывалые п
Оглавление

Полезные советы

Наверняка вы встречали загадочные символы в командной строке и задавались вопросом: что это за магия? Это подстановочные знаки — и они действительно могут превратить работу с файлами в Linux в игру!

Что такое подстановочные знаки?

Подстановочные знаки (они же — метасимволы) — специальные символы, которые подменяют собой один или несколько других. Они работают как джокеры в картах: берут на себя любую роль, которая вам сейчас нужна.

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

Этими масками управляет не программа, а оболочка (shell). Когда подстановочные знаки попадают в команду, оболочка разворачивает их в список файлов, а программе передаёт уже обычные имена — без спецсимволов.

В каждой оболочке есть свой набор символов, но самые популярные — поиск по одному символу или по целой группе — работают почти везде. Например, в zsh такие маски продвинуты настолько, что эту оболочку любят бывалые пользователи.

Разные терминалы часто копируют друг у друга функции: Bash, например, вобрал много полезных фишек из Bourne shell и ksh, поэтому привычные шаблоны работают почти в любой среде.

Для расширенных масок иногда нужно включить опции через setopt (zsh) или shopt (Bash). Всё зависит от того, какой shell вы используете.

Один любой символ: вопросительный знак "?"

Самый простой вариант: поставьте "?" вместо одного любого знака.

Допустим, у меня есть папка со скриптами на Perl (.pl) и Python (.py). А если хочу увидеть все фото вида photo_01, photo_02 и так далее, просто использую "?" для одной переменной цифры:

-2

Если по шаблону ничего не находится, терминал покажет пустой вывод или сообщение, что совпадений нет.

Хочется сразу всё? Используйте звёздочку "*"

Звёздочка "*" — самый универсальный подстановочный знак. Она заменяет сразу любую последовательность символов — от нуля до бесконечности. Такое поведение называют "глоббингом". В отличие от "?", который отвечает только за одно место, "*" подбирает сразу всё подряд.

Например, чтобы сразу увидеть все фотографии формата JPEG в папке, достаточно написать:

-3

Точно так же шаблон можно применить и к подкаталогам:

Маски легко комбинируются. Например, если ищете одновременно Perl и Python-скрипты с окончаниями .pl и .py:

Можно искать не только по окончанию, но и по любой части названия, например, находить файлы с буквой "d" в середине имени:

А в оболочках с поддержкой рекурсивного поиска (например, zsh) символ "**" показывает всё содержимое во всех подпапках. Например, для просмотра всех файлов во всех вложенных папках вашего домашнего каталога:

С тем же успехом работает и для любых других директорий:

-4

Если использовать три звёздочки "***", вы найдёте даже такие файлы, которые спрятаны во вложенных папках и связанных симлинках.

В Windows часто используют "*.*", чтобы вывести всё подряд. В Linux достаточно одной "*": она покажет весь список файлов и папок в директории.

А чтобы скопировать всё содержимое папки разом, используйте команду примерно вот в таком виде:

ВНИМАНИЕ! Будьте очень осторожны с масками в командах удаления (rm): ошиблись с шаблоном — и удаляете всё! Лучше заранее делать резервные копии.

Как искать буквы и цифры из диапазона: используйте квадратные скобки

Маски позволяют находить конкретные буквы и цифры, если задать их в квадратных скобках.

К примеру, нужны все файлы с буквами a, b или c в имени? Запись будет такой:

Можно указать и диапазон через дефис. Например, захватить все строчные буквы от "a" до "z":

Нужны заглавные буквы?

А если ищете определённые цифры — просто используйте нужный диапазон в скобках:

Маски можно объединять. Чтобы искать и большие, и маленькие буквы сразу:

Или буквы вместе с цифрами — без проблем:

Чаще всего такие шаблоны комбинирую с другими масками. Например, чтобы найти все Perl- и Python-скрипты, пригодится вот такой вариант:

-5

Такой шаблон подберёт всё, что заканчивается на ".pl" или ".py".

Иногда удобно искать всё, что начинается с определённой последовательности, например, "py".

В современных оболочках (Bash, zsh) работают и фигурные скобки — для подстановки целых групп вариантов.

К примеру, вывести "cat" и "dog" одной командой:

-6

А чтобы получить сразу несколько букв, допустим, от "a" до "d", используйте двоеточие:

-7

То же самое работает для чисел: выводите числа от 1 до 10 одной строкой:

-8

Маски с фигурными скобками и запятыми сразу подставят все указанные варианты. Но если пытаться вызвать ls для несуществующих файлов — терминал выдаст ошибку.

Ищете сразу несколько шаблонов? Круглые скобки вам в помощь!

Если нужно перечислить возможные варианты через "или", используйте круглые скобки с вертикальной чертой "|". Такой способ легко находит альтернативные имена и шаблоны.

Допустим, мне важно выбрать файлы с разными вариантами написания. Просто смотрите лайфхак: звёздочка "*" перед скобками — и ищете любое количество символов до интересующей группы.

Например, ищем Perl и Python-скрипты:

Вот ещё вариант:

А запись (a|b) найдёт файл, где подряд идут одна или несколько "a" или "b". Только одну — ставьте "@".

Как отсеять ненужные файлы: знаки "!" и "^"

Можно искать не только совпадения, но и всё, что не попадает под условия — для этого в начале шаблона ставятся "^" (крышка) или "!" в квадратных скобках.

К примеру, чтобы вывести все файлы без заглавных букв:

Аналогично — ещё такой вариант записи:

В комбинированном поиске (с круглыми скобками) так же можно отминусовать ненужные варианты через "!" и получить только то, что не соответствует шаблону.

Как сделать так, чтобы маска не сработала: используем кавычки

Иногда надо передать символы буквально, чтобы они не превратились в маску — это удобно в команде grep с регулярными выражениями.

Если не нужны переменные оболочки — ставьте одинарные кавычки: маска не развернётся. Например, ищем паттерн в начале строки с помощью grep и символа "^" (в масках — отрицание), берём его в одинарные кавычки:

Если же надо использовать переменную — берите шаблон в двойные кавычки: переменная раскроется, а маска останется как есть.

Умелое владение подстановочными знаками здорово облегчает работу в Linux. Звёздочка спасает чаще всего, а другие маски позволяют ловко обрабатывать даже очень сложные выборки — легко и красиво!

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: