Mmv

Матеріал з Wiki.Zina
Перейти до навігації Перейти до пошуку

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

Другая хорошая штука, которую можно делать в mmv — замена регистра текста, совпавшего с заполнителем. Поместите «l» (нижний регистр) или «u» (верхний регистр) до «#» и числа в целевом шаблоне:

john.txt
pete.txt
mmv "?*.txt" "#u1#2.txt"

Это дает

John.txt
Pete.txt

Безопасность

[ред. | ред. код]

Mmv пытается быть безопасным, насколько это возможно, чтобы избежать противоречий в переименовании, при которых файлы могут удаляться. Если, например, результат переименования приведет к тому, что два разных файла получат одно имя (таким образом, один будет перезаписан), mmv выдаст предупреждение и прекратит процесс.

Mmv также пытается верно обходиться с переименованиями, которые приводят к тому, что целевой файл по имени совпадает с одним из исходных. К примеру:

a
aa
mmv "*" "a#1"

Это не перезапишет файл «aa» содержимым «a», а даст, как и ожидалось

aa
aaa

Доступность

[ред. | ред. код]

Mmv есть в Debian по крайней мере с версии 3.1 (Sarge) и в Ubuntu после Warty. Для установки сделайте «apt-get install mmv».

Примечания

[ред. | ред. код]
  • Переименование директорий может производиться только с опцией -r.
  • Помните, что шаблоны нужно заключать в кавычки!