Иллюстрированный самоучитель по Linux

Подстановочные символы

Одно из мощных средств современных оболочек (в том числе Bash) – подстановочные символы, позволяющие задавать несколько имен команд или файлов в одном выражении. Рассмотрим простой пример. Если ввести команду:

$ ls – |

…ответом на нее будет полный список файлов текущего каталога. Предположим, что нам надо найти файл, о котором известно только то, что его имя начинается на букву "z". Введем команду:

$ Is – | z*

…в которой аргумент z * означает все файлы, имена которых начинаются на букву "z". Пользователям DOS или Windows такое применение звездочки, вероятно, знакомо. После ввода команды оболочка Bash составляет список всех файлов, имена которых начинаются на "z" и заменяет аргумент z * этим списком. Имена файлов из списка передаются в качестве аргументов команде Is – |. В оболочке Bash возможности подстановочного символа "*" значительно шире, чем в DOS или окне DOS системы Windows.

Подстановочные символы в обозначении каталогов и файлов

Одно из применений подстановочных символов – обозначение каталогов и файлов. Здесь, кроме звездочки, применяются еще два символа. Все символы, а также их значения, перечислены в табл. 16.3.

Табл. 16.3. Применение подстановочных символов в обозначении каталогов и файлов.

Символ Описание
?
Любой единичный символ
[…] Любой единичный символ, заключенный в скобки
[A-F] Любой единичный символ, попадающий в указанный диапазон
[ …] или [|…] Любой единичный символ, кроме заключенных в скобки
[ A A-F] или [IA-F] Любой единичный символ, не попадающий в указанный диапазон

Рассмотрим несколько примеров.

Предположим, надо составить список всех файлов с именами длиной в три символа, первый из которых "а", а последний – "z". Это можно сделать, введя команду:

$ Is – | a?z

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

$ Is – I a*z

Вопросительный знак обозначает один произвольный символ, звездочка – любое их количество, включая нуль.

Рассмотрим ситуацию, когда необходимо получить список файлов, имена которых начинаются на а, b, с или d. Для этого можно воспользоваться следующей командой:

$ Is – | а* b* с* d*

Однако такая форма несколько громоздка. Гораздо удобнее воспользоваться следующей:

$ Is – I [abed]*

Выражение в квадратных скобках означает любую из перечисленных букв, звездочка – любое число следующих за ней произвольных символов.

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

$ Is – I [a-d]*

Наконец, иногда необходимо исключить один или несколько символов, включив все остальные, Рассмотрим создание сжатого архива всех исходных каталогов системы. Предположим, нужно архивировать все каталоги кроме тех, имена которых начинаются с буквы "m". Для этого можно воспользоваться командой:

$ tar czvf home.tar.gz /home/[a-1]* /home/[n-z]*

…но гораздо удобнее следующая форма этой же команды:

$ tar czvf home.tar.gz /home/[!m]*

Здесь выражение в квадратных скобках обозначает любой символ, кроме буквы "m".

Можно усложнить задачу, исключив архивирование каталогов, имена которых начинаются с букв m, n или о. Соответствующая команда будет иметь вид:

$ tar czvf home.tar.gz /home/[^mno]*

Или:

$ tar czvf home.tar.gz /home/[!m-o]*
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.