Сегодня я продолжу рассказывать об азах Linux. В качестве примера гибкости и удобства, рассмотрим операцию массового переименования файлов. В общем достаточно тривиальная задача, но в Linux ее можно выполнить не одним и даже не двумя способами. Список примеров не претендует на полноту, но общее представление даст. Итак, допустим у нас есть несколько файлов:

Файлы sh мы хотим переименовать в sh.bak. Рассмотрим варианты:

Offtop. Переименовать один файл в Linux:

mv имя-файла1 имя-файла2

Rename

Утилита rename входит в стандартную поставку Debian, так что начнем с нее.

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

-v отобразить имена успешно переименованных файлов.

-n отобразить список файлов, которые будут переименованы, без переименования в итерации.

-f перезаписать уже существующие файлы.

perlexpr — шаблон для переименования.

Для того, чтобы выполнить переименование файлов согласно условию, выполним команду:

Рассмотрим perlexr подробнее:

s=указывает, что требуется замещение.

/.sh/=Строка, которую будем замещать.

/.sh.bak/ = строка, на которую будем замещать

g=global, будем замещать все найденные вхождения.

С помощью rename можно быстро изменить регистр файлов. Например поднимем регистр файлов из примера:

rename ‘y/a-z/A-Z/’ *

MMV

mmv — программа для массового перемещения, переименования, копирования, объединения файлов.

По умолчанию она не включена в состав Debian. Поставим ее:

Наша задача решается одной строкой:

MV

Теперь решим нашу задачу стандартной командой mv. Для этого нам прийдется немного попрограммировать в bash.

Попробуем усложить задачу. Например у нас есть куча файлов JPG:

Мы хотим привести их к следующему виду:

Пример скрипта:

Midnight Commander

В любимом многими mc, процесс переименования по маске выполняется просто и непринужденно в два действия.

1. Через + выбираем файлы по маске *.sh

2. Нажимаем F6 и в destination указываем *.sh.bak

Все примеры, приведенные выше, так или иначе работают во всех Linux, BSD, Mac OS, если стоят соответствующие утилиты.

На этом все, спасибо за внимание.