Samstag, 26. November 2011

Schnelles Mehrfach-Umbenennen auf der Kommandozeile


Heute habe ich angefangen, alle Fotos nach Jahren in Ordner zu sortieren. Dabei stieß ich auf folgendes Problem: Es gab eine Reihe von Fotos mit gleichem Dateinamen, aber anderem Motiv. Dies ist dadurch bedingt, dass Verwandte bzw. Bekannte von mir eine Kamera hatten, welche das gleiche Namensschema wie meine verwendet (konkret: DSCNxxxx.JPG).

Zusammenführen in den gleichen Ordner geht also nicht ohne Umbenennen. Dabei schwebt mir eine "einfache Änderung des Dateinamens vor, z.B. sowas wie DSCN0001.JPG nach DSCN0001_foo.JPG. Nur für das manuelle Umbenennen via Nautilus & Co. sind es zu viele Dateien. Hilfsprogramme, wie sie das Wiki von ubuntuusers.de listet wie z.B. pyRenamer oder rename erscheinen mir ein wenig übertrieben. Zumal ich sicher war, dass es auch ganz einfach mit der Kommandozeile geht.

Leider sind meine Skills auf der Kommandozeile nicht sooo prall, so dass die Suchmaschine meiner Wahl herhalten muss. Damit ist auch schnell die Lösung gefunden

for i in *.JPG; do mv "$i" "`basename $i .JPG`_foo.JPG"; done

Ganz einfach, eigentlich. Dieser Einzeiler stammt übrigens Debian Administration Seite (Link), wo man auch noch weitere Einzeiler und Tipps zum Umbenennen auf der Kommandozeile findet.

Die Verwendung der for-Schleife im Kombination mit basename ist übrigens recht universell einsetzbar und nicht nur auf das obige Beispiel in Kombination mit mv beschränkt.

Kommentare:

  1. Was genau ist an

    rename 's/\.JPG$/_foo\.JPG/' *.JPG

    übertrieben? Es wurde doch genau für diesen Zweck geschrieben. Zudem ist es sehr viel kürzer und ich halte die Syntax für sehr viel einprägsamer als das - sorry - olle Bash-Konstrukt, das - wie du schreibst - du selbst ja auch nicht ad-hoc drauf hattest.

    Abgesehen davon habe ich gehört, dass man `` nicht verwenden soll, stattdessen $().

    Das von mir ... und nur zum Denken, nicht zum Bashen (höhö).

    AntwortenLöschen
  2. > Was genau ist an ... übertrieben?
    Gut, übertrieben ist es nicht nicht. Aber auch wenn ich reguläre Ausdrücke selber beim Programmieren benutze, kann ich mir diese Syntax überhaupt nicht merken. Muss ich jedes Mal nachlesen ;-)

    AntwortenLöschen
  3. Für die Arbeit mit Bildern empfiehlt sich auch das Kommandozeilenwerkzeug exiftool. Dieses kann zum Umbenennen auch auf die Metadaten der Bilder zugreifen und diese somit direkt in die entsprechenden Unterordner einsortieren und wie gewünscht umbenennen. Beispiele mit weiterführenden Links habe ich mal auf
    http://www.meier-benjamin.de/blog/items/bilder-fuer-die-veroeffentlichung-im-internet-aufbereiten.html veröffentlicht.

    Gruß Benjamin

    AntwortenLöschen
  4. Ich verwende normal
    find . -iname '*.jpg' -print0 | xargs -0 jhead -ft -nf'/home/user/Bilder/%Y/%m/%Y-%m-%d--%H-%M-%S'
    in einem Skript. Das sucht im aktuellen Ordner rekursiv alle jpgs, und benennt sie nach dem Erstellzeitpunkt auf Sekunde genau. Damit erübrigt sich in 99% der Fälle das durchnummerieren und es ist viel leichter ein Bild zuzuordnen.
    Zusätzlich wird das Bild in den Bilderordner verschoben und dort nach /Jahr/Monat/ einsortiert.

    Wenn schon komfortabel, dann richtig ;)

    AntwortenLöschen