batch rename unter mac osx
Ich hatte gerade das Problem, dass ich 94 Bilddateien umbenennen musste. Die Bilder hatten alle den Teilstring “bearb_#” oder “bearb_” im Namen und der sollte entfernt werden.
Unter MacOSX gibt es dafür natürlich einige grafische Tools, nicht zuletzt den Automator. Dieser bennent auf Wunsch beliebig viele Dateien um, allerdings mit festem Namen und einer laufenden Nummer. Ich wollte die Namen meiner Bilder allerdings behalten und nur den störenden Teilstring entfernen.
Hier zeigt sich mal wieder warum ich meinen Mac so mag: Geniales GUI – aber unter der Haube ein Unix mit all seinen nützlichen Tools! Einen Teilstring aus allen Dateinamen eines Ordners zu entfernen ist für ein Unix und die Bash keine Herausforderung – dazu braucht man nur eine einzige Befehlszeile:
for FILE in * ; do NEWFILE=echo $FILE | sed -E 's/bearb_#?//g' ; mv "$FILE" "$NEWFILE" ; done
Die Befehle im Detail:
- for FILE in *; do: Eine For-Schleife die nacheinander alle Dateien im aktuellen Verzeichnis einliest und deren Dateinamen in der Variable $FILE spiechert.
- NEWFILE=` … `: Diese Anweisung führt eine neue Variable $NEWFILE ein und weist ihr die Ausgabe der Befehle zwischen den Anführungszeichen zu. Die schrägen Anführungszeichen haben die Besonderheit, dass der String zwischen ihnen als Unix-Befehl ausgeführt wird.
- echo $FILE | sed -E ‘s/bearb_#?//g’: echo $FILE gibt einfach nur den alten Dateinamen aus und die Pipe (der senkrechte Strich: | ) leitet die Ausgabe von echo auf den zweiten Befehl sed um. sed kann mit Hilfe von Regulären Ausdrücken Zeichenketten bearbeiten. Der Parameter -E aktiviert die erweiterten Regulären Ausdrücke von sed. Das s vor dem ersten Schrägstrich weist sed an, den String zwischen den ersten beiden Schrägstrichen mit dem String zwischen dem 2. und 3. Schrägstrich zu ersetzen. Der 2. String ist leer, was bedeutet, dass der mit dem 1. Regulären Ausdruck gefundene String einfach gelöscht wird. Der Reguläre Ausdruck ist einfach der Teilstring den ich entfernen muss. Das #-Zeichen kam in manchen Strings nicht vor. Damit der Reguläre Ausdruck Teilstrings in der Form “bearb_” und “bearb_#” findet, steht das ?-Zeichen hinter dem #-Zeichen. Ein ?-Zeichen bedeutet bei Regulären Ausdrücken, dass ein Zeichen genau 0- oder 1mal vorkommen darf.
- done: Das abschließende done beendet die for-Schleife.
Problem gelöst – mit Unix Hausmitteln, ohne extra Tools!

