22 июля, 2007

mmv - мульти (множественное) перемещение и переименование файлов

mmv - это программа командной строки, которая позволяет пользователю перемещать, переименовывать, копировать, конкатенировать и связывать большое количество файлов одной коммандой. Тулза особенно полезна, если Вам необходимо переименовать множество файлов, которые имеют схожие названия, но все еще с изощренными различиями.

.deb пакет
Mmv доступна в Debian начиная с версии 3.1 ('Sarge') и в Ubuntu начиная с версии 'Warty'.
~# apt-get install mmv #установить mmv


Хотя mmv выполняет больше функций, чем просто переименовывание файлов, в этой статье внимание будет сосредоточено только на переименовывании, что чаще всего используется мной. Объясню на примере.

Предположим в директории вы имеете следующие файлы:
foo1.png
foo2.png
bar3.png

Вы хотите, чтобы все файлы, начинающиеся с 'foo' имели начало 'bar'. В этом случае Вы могли бы просто переименовать файлы вручную, но представьте себе, что таких файлов тысяча! Вы скорее всего будете вынуждены запустить шел-сценарий. Mmv наилучшим образом подходит для этой работы:
~$ mmv "foo*.png" "bar#1.png"

Получим такие результаты:
bar1.png
bar2.png
bar3.png

Кухня


Шаблон 'Откуда'

Mmv сопоставляет файлы используя выбранный Вами символ (шаблон 'Откуда'). Файлы переименовываются в соответствии со вторым аргументом (шаблоном 'Куда'). В шаблоне 'Откуда' могут встречаться любые символы, используемые в коммандной строке, такие как '*', '?' и '[]'. Запомните, что шаблоны нужно заключать в ковычки, иначе они будут расширены шелом и mmv их не поймет!

Шаблон 'Куда'

'#1' в шаблоне 'Куда' является индексом символа. Он сопоставляется с первым символом найденном в шаблоне 'Откуда'. '#2' будет соосветственно сопоставляться со вторым символом, и так далее. Mmv заменяет любые экземпляры индексов символов текстов, подобным в шаблоне 'Откуда'. В примере выше, '#1' подгоняет числа после 'foo' и следующие за ним. '??'

Еще примеры

Шаблоны 'Откуда' и 'Куда' могут также использоваться для изменения символов вокруг в именах файлов:
abc_123.txt
def_456.txt
ghi_789.txt

~$ mmv "*_*.txt" "#2_#1.txt"

Получим:
123_abc.txt
456_def.txt
789_ghi.txt
Другой трюк может изменять регистр(верхний/нижний) согласованный символом. Чтобы это проделать нужно поместить 'l' или 'u' между '#' и номер в шаблоне 'Куда':
john.txt
pete.txt

~$ mmv "?*.txt" "#u1#2.txt"

Получим:
John.txt
Pete.txt

Заметки

Переименовывание директорий может быть выполнено только с параметром -r.
Не забывайте заключать в ковычки параметры 'Куда' и 'Откуда'!
Article submitted by Ferry Boender.
Перевод: va1e.

6 комментариев:

virens комментирует...

А не тоже ли это самое, что при использовании find? А так интересно. Надо будет посмотреть...

Tuxedo комментирует...

нет, это разные вещи

Вий комментирует...

а чем плох rename, что с перлом идет?

Tuxedo комментирует...

Ничем не плох, пользуйте то, что Вам нравиться, вий. Просто показал еще один способ проделать ту же работу в Debian. Кстати, mmv безопаснее работает с файлами: никогда не затирает их.

Некто комментирует...

Отличная вещь, но есть один минус - не может работать с файлами, где в названии есть [квардратные скобки], т.к. они являются чем-то типа звёздочек и знаков вопроса.

vig комментирует...

@Некто
не пользую mmv, попробуйте экранировать символы