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.
Schreibe einen Kommentar