Оригинальный текст: 14 Wildcards Simple (But Important) Things To Remember Linux Scripting

Перевод: очень вольный, собственный

Оболочки командной строки Linux поддерживают различные маски, которые можно использовать для манипуляций с именами файлов для группировки их по заданному шаблону. К примеру, необходимо удалить 100 файлов в текущей папке, имеющих расширение .txt. Можно попробовать обработать их поодиночке. Однако, если с 10 файлами проделать это будет просто нудно, то с 100 – еще и займёт слишком много времени.

Гораздо лучшее решение – использовать для подобных целей маски символов. В данном случае нужно удалить файлы, имена которых заканчивается на .txt. При этом не важно, из каких цифр или букв состоит остальная часть файла. В данном случае маска символов – именно эта часть “не важно”. В имени файла оно может принимать любое значение.

Что такое маска?

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

14 примеров использования масок в именах файлов

1. Один любой символ

С помощью команды ls (просмотр содержимого папки) продемонстрируем, как знак вопроса заменяет собой один любой символ
ozi@blog:~$ ls -l ?? -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 ak -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 ar -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 bs -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 lq -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 tz
ozi@blog:~$ ls -l a? -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 ak -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 ar
В данном примере было показано, что знак ‘?’ эквивалентен одному любому символу

2. Любая строка

Заменяет собой 0 и больше любых символов
ozi@blog:~$ ls -l *.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 123123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 45C.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 a123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 A123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 B45.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:57 ,.txt
ozi@blog:~$ ls -l *????.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 123123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 a123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 A123.txt

3. Один символ из определённого подмножества

С помощью квадратных скобок можно определить нужное нам подмножество символов
ozi@blog:~$ ls -l [1aB]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 123123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 a123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 B45.txt
ozi@blog:~$ ls -l ?[125]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 123123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 45C.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 a123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 A123.txt

4. Символ, который не входит в определённое множество

Подставив перед подмножеством восклицательный знак, можно исключить эти символы
ozi@blog:~$ ls -l [!1aB]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 45C.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 A123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:57 ,.txt
ozi@blog:~$ ls -l ?[!125]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 B45.txt
Примечание: во многих языках программирования ‘!’ обозначает отрицание или, по-простому, “не”.

5. Только буквы

Если нужно заменить только буквенные символы, то можно использовать специальную маску [:alpha:]
ozi@blog:~$ ls -l [[:alpha:]]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 a123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 A123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 B45.txt

6. Все символы, не обозначающие буквы

Знак ‘!’ применим и к специальным маскам
ozi@blog:~$ ls -l [![:alpha:]]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 123123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 45C.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:57 ,.txt

7. Символы нижнего регистра

Для обозначения маленьких букв используется специальная маска [:lower:]
ozi@blog:~$ ls -l [[:lower:]]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 a123.txt

8. Символы верхнего регистра

Для больших букв – [:upper:]
ozi@blog:~$ ls -l [[:upper:]]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 A123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 B45.txt

9. Только цифры (0 – 9)

Используя маску [:digit:] можно перечислить все цифры от 0 до 9.
ozi@blog:~$ ls -l [[:digit:]]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 123123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 45C.txt

10. Символы, которые не относятся к числам или буквам

Разнообразные знаки пунктуации – [:punct:]
ozi@blog:~$ ls -l [[:punct:]]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:57 ,.txt

11. Буквы и цифры

Если нужные символы относятся к цифрам и буквам – можно использовать специальную маску [:alnum:]
ozi@blog:~$ ls -l [[:alnum:]]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 123123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 45C.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 a123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 A123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 B45.txt

12. Пробел

Маска [:space:] эквивалентна символу пробела
ozi@blog:~$ ls *[[:space:]]*.txt ls: невозможно получить доступ к *[[:space:]]*.txt: Нет такого файла или каталога

Создадим файл, содержащий пробел
ozi@blog:~$ touch asd\ asd.txt

И проверим работу команды еще раз
ozi@blog:~$ls -l *[[:space:]]*.txt -rw-r--r-- 1 ozo ozo 0 июл 26 11:11 asd asd.txt

13. Оператор И

Объединить несколько команд можно с помощью оператора && (И). Если первая команда выполнится удачно, то запускается вторая.
ozi@blog:~$ ls -l && date -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 123123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 45C.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 a123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 A123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 ak -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 ar -rw-r--r-- 1 ozo ozo 0 июл 26 11:11 asd asd.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 B45.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 bs -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 lq -rw-r--r-- 1 ozo ozo 0 июл 26 10:57 ,.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 tz Вт июл 26 11:12:58 MSK 2016
ozi@blog:~$ lss && date bash: lss: команда не найдена

Хотя это и не относиться к теме статьи, но использование оператора && удобно на практике и значительно экономит время

14. Оператор ИЛИ

В отличии от оператора &&, оператор || (ИЛИ) используется тогда, когда нужно выполнить другую команду в случае неудачного завершения первой
ozi@blog:~$ ls -l || date -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 123123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 45C.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 a123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 A123.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 ak -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 ar -rw-r--r-- 1 ozo ozo 0 июл 26 11:11 asd asd.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:56 B45.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 bs -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 lq -rw-r--r-- 1 ozo ozo 0 июл 26 10:57 ,.txt -rw-r--r-- 1 ozo ozo 0 июл 26 10:54 tz
ozi@blog:~$ lss || date bash: lss: команда не найдена Вт июл 26 11:14:45 MSK 2016

Заключение

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

Маска символов – простая (но важная) вещь, которую нужно знать о Linux: 2 комментария

  1. Ravi on 27.07.2016 at 08:10 пишет:

    Please provide me an backlink to my site when to use my article. Basically copying the content from my site is copyright violation.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Навигация по записям