Маски имен файлов linux

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

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

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

Что такое маска символов или регулярное выражение в Linux?

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

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]])

Если нужно заменить только буквенные символы, то можно использовать специальную маску [: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. Все символы, не обозначающие буквы ([![:alpha:]])

Знак ‘!’ применим и к специальным маскам
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:]])

Для обозначения маленьких букв используется специальная маска [: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: команда не найдена

Читайте также:  Astra linux ifconfig команда

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

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

При выполнении операций копирования и перемещения (или переименования) файлов вы имеете возможность изменить имена копируемых или перемещаемых файлов. Для этого вы должны задать маску для имен файлов-источников и маску для имен файлов, которые будут созданы (файлы-приемники). Обычно эта вторая маска представляет собой несколько символов замены (wildcards) в конце строки, определяющей место назначение создаваемых файлов. Задание масок осуществляется в строках ввода, отображаемых в окне, появляющемся после обращения к командам копирования / переноса (рис. 6.6).

Все файлы, удовлетворяющие маске источника, будут переименованы (скопированы или перемещены с новыми именами) в соответствии с маской файла-приемника. Если имеются помеченные файлы, то копируются (перемещаются) только помеченные файлы, удовлетворяющие заданной маске для файлов-источников.

Рис.6.6. Диалоговое окно для переименования файлов

Рис. 6.6. Диалоговое окно для переименования файлов

Есть еще несколько опций, которые влияют на выполнение операций копирования/перемещения файлов, и которые устанавливаются в том же окне запроса, где задаются маски имен файлов, либо через команду меню Настройки | Конфигурация .

Опция Разименовывать ссылки (Follow links) определяет, будут ли при копировании жестких или символических ссылок в каталоге-приемнике (и рекурсивно в подкаталогах) создаваться такие же ссылки, или будут копироваться файлы (и подкаталоги), на которые эти ссылки указывают.

Опция Внутрь каталога, если есть (Dive into subdirs) определяет, что делать, если в каталоге-приемнике уже существует подкаталог, имя которого совпадает с именем файла (каталога), который копируется (источника). По умолчанию (опция отключена) содержимое каталога-источника копируется в каталог-приемник. Если опция включена, то в каталоге приемнике будет создан новый подкаталог с тем же именем, в который и будет осуществляться копирование.

Лучше показать это на примере. Пусть вы хотите скопировать содержимое каталога one в каталог /two/one, который уже существует. Обычно (опция отключена) mc будет просто копировать все файлы из one в /two/one. Если опцию включить, копирование файлов будет производиться в /two/one/one.

Читайте также:  Где в линукс wifi

Опция Сохранять атрибуты (Preserve attributes) определяет, будут ли при копировании/перемещении сохранены атрибуты исходного файла: права доступа, временные метки и, если вы root, UID и GID исходного файла. Если опция отключена, атрибуты будут установлены в соответствии с текущим значением umask.

На процедуры копирования и перемещения файлов оказывает также влияние установка опции Образцы в стиле shell в меню Настройки / Конфигурация. Когда эта опция включена, вы можете использовать символы замены (wildcards) ‘*’ и ‘?’ в маске источника. Они обрабатываются аналогично тому, как это делается в shell. В маске приемника разрешается использовать только ‘*’ и ‘\ < цифра >‘. Первый символ ‘*’ в маске приемника соответствует первой группе символов замены в маске источника, второй символ ‘*’ соответствует второй группе и т. д. Аналогично, символ замены ‘\1’ соответствует первой группе символов замены в маске источника, символ ‘\2’ — второй группе и т. д. Символ ‘\0’ соответствует целому имени файла-источника. Приведем пару примеров.

Пример 1 . Если маска источника «*.tar.gz», а маска приемника — «/two/*.tgz», и имя копируемого файла — «foo.tar.gz», копия будет называться «foo.tgz» и будет находиться в каталоге «/two».

Пример 2. Предположим, вы хотите поменять местами имя и расширение файла, так чтобы «file.c» стал файлом «c.file». Маска источника для этого должна иметь вид «*.*», а маска приемника — «\2.\1».

Когда опция Образцы в стиле shell ( » Use shell patterns ” ) выключена, mc не осуществляет автоматической группировки. Для указания групп символов в маске источника, которые будут соответствовать символам замены в маске приемника, вы должны в этом случае использовать скобки ‘\(. \)’. Этот способ более гибкий, но требует больше усилий при вводе. Снова приведем два примера

Пример 3 . Если маска источника имеет вид «^\(.*\)\.tar\.gz$», копирование производится в «/two/*.tgz» и копируется файл «foo.tar.gz», то результатом будет «/two/foo.tgz».

Пример 4 . Предположим, что вы хотите поменять местами имя файла и его расширение, так чтобы имена вида «file.c» приняли вид «c.file».

Маска источника для этого — «^\(.*\)\.\(.*\)$», а маска приемника — «\2.\1».

При выполнении операций копирования/перемещения вы можете также преобразовать регистр символов в именах файлов. Если вы используете ‘\u’ или ‘\l’ в маске приемника, то следующий символ имени будет образован в верхнем (заглавные символы) или нижнем (строчные) регистре соответственно.

Если использовать в маске приемника ‘\U’ или ‘\L’, то к соответствующему регистру будут преобразованы все последующие символы, вплоть до следующего вхождения ‘\L’ или ‘\U’, или же до конца имени файла.

Применение ‘\u’ и ‘\l’ обеспечивает более широкие возможности, чем ‘\U’ и ‘\L’.

Например, если маска источника есть ‘*’ (опция Образцы в стиле shell включена) или ‘^\(.*\)$’ (опция Образцы в стиле shell выключена), а маска приемника есть ‘\L\u*’, имена файлов будут преобразованы таким образом, что первые буквы имени будут заглавными, а все остальные — строчными.

Символ ‘\’ в масках используется для отмены специальной интерпретации отдельных символов. Например, ‘\\’ означает просто обратный слэш (как литерал) и ‘\*’ означает просто звездочку (asterisk).

Источник

Оцените статью
Adblock
detector