Im Rahmen der Migration eines WordPress.com Blogs auf meinen eigenen Webserver kam ich kürzlich an den Punkt, viele Bilder auf einmal umbenennen zu wollen.

Unter MS-DOS gab es dafür den guten alten Befehl rename der zum Beispiel solche Operationen ermöglichte:

C:\> RENAME *.TXT *_OLD.TXT

Dabei matcht MS-DOS den Platzhalter im ersten Ausdruck mit den vorhandenen Dateien und benennt sie dann gemäß dem zweiten Ausdruck um. Alle Textdateien erhalten also im Namen die Erweiterung _OLD. Das klappt natürlich auch entsprechend in umgekehrter Richtung:

C:\> RENAME *_OLD.TXT *.TXT

Nun sind meine MS-DOS Zeiten lange vorbei und ich brauchte etwas Vergleichbares unter Linux um durch WordPress erzeugte Bilder im Format *-scaled.jpg zu *.jpg umzubenennen.

Linux Bordmittel zum Umbenennen

Nun, normalerweise nutzt man zum Umbenennen unter Linux mv:

david@mars ~ $ mv dateiname.alt dateiname.neu

Das klappt allerdings nur für einzelne Dateien. Nutzt man das Globbing erwartet mv als zweiten Parameter ein Verzeichnis. Das hilft mir nicht weiter.

Es gibt auch einen Befehl rename aus dem perl-Paket, der allerdings mit regulären Ausdrücken arbeitet und das ist fast ein wenig zu heftig diese die einfache Operation:

rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr] | perlexpr [ files ]

Bisher hab ich mich dann gelegentlich durch die Funktion “Stapel-Umbenennen” in XnView beholfen oder hab auch schon mal die Dateinamen über die Funktion VERKETTEN() in OpenOffice Calc zusammengebaut und dann die fertigen Kommandozeilen-Operationen über die Shell ausgeführt. Letzteres vor allem, wenn die Regeln komplexer waren und ich vorher checken wollte, ob alles stimmt.

Umbenennen mit mmv

Diesmal hab ich spontan mal geprüft, ob es nicht noch eine andere, einfache Variante gibt, das Problem zu lösen und bin dann in diesem Beitrag auf mmv gestoßen. Die Installation erfolgt einfach über das Paketsystem:

david@mars ~ $ sudo apt-get install mmv

Die Anwendung ähnelt der von rename unter MS-DOS, aber ist ein wenig ausgefeilter. Im einfachsten Fall sieht das beispielsweise so aus:

david@mars ~ $ mmv \*.alt \#1.neu

Dadurch werden die Dateien, auf die der erste Ausdruck *.alt passt, entsprechend zu *.neu umbenannt. Wichtig ist hierbei, dass die Platzhalter durch Backslash gequotet werden und im zweiten Ausdruck statt dem Sternchen über #1 angegeben wird, welches Sternchen aus dem ersten Ausdruck eingesetzt werden soll.

Es können also auch mehrere Sternchen im ersten Ausdruck genutzt werden, was es möglich macht, mehrere Ersetzungen gleichzeitig vorzunehmen. Zudem erlaubt mmv auch die Verwendung von ? um statt einer Zeichenkette ein einzelnes Zeichen zu matchen. Um den Backslash zu vermeiden, kann man auch alles in Anführungszeichen setzen, was die Lesbarkeit noch verbessert:

mmv "*-scaled.jpg" "#1.jpg"

Zudem warnt das Tool vorab, wenn mehr als eine Datei den gleichen Zielnamen hat, was es erspart manuell zu prüfen, ob Duplikate vorkommen. In diesem Fall, sowie bei anderen Fehlern unternimmt er nichts, richtig viel schief gehen kann also auch nicht.

Mich hat am Ende vor allem die leicht zu merkende Syntax überzeugt und ich denke, ich werde in Zukunft mehrfache Umbenennungen bevorzugt mit mmv machen.