Mehrere Dateien umbenennen

Wer viele Dateien auf einmal unbenennen will, sollte dies sein Rechner tun lassen. Das umso mehr, wenn die Dateien nach einem Muster benannt werden sollen. Beispiel: die Bilder eines Anlasses nummerieren.

1. Lösung: Bash

Das folgende Bash-Script nimmt alle Dateien mit einer Endung (hier jpg), gibt ihnen einen neuen Namen und nummeriert sie. Um die Sortierung beizubehalten, füllt es die Nummern mit 0-Stellen auf.

#!/bin/bash

# Endung der Dateien
ENDUNG=jpg

# Neuer Name der Dateien
NEU="neuer-name-"

# Nummerierung der Dateien
STELLEN=3     # Stellen der Nummerierung
NUMMER=1      # Startnummer
NULL=000000   # Füllzeichen

# Wegen Leerzeich in alten Dateinamen
OLDIFS=$IFS
IFS=$'\12'

for i in $(find . -name ".$ENDUNG") ;
do
    NULLNUMMER=$(printf $NULLNUMMER)
    ZAHL=${NULLNUMMER: -$STELLEN}
    mv "$i" $(printf $NEU$ZAHL).$ENDUNG
    let ++NUMMER;
done

# Wegen Leerzeichen in neuen Dateinamen
IFS=$OLDIFS

2. Lösung: Vim

Der Editor Vim lässt sich dazu verwenden Dateien umzubenennen. Der Vorteil dabei ist, dass man die Änderungen vor der Ausfühurung vor sich hat.

ls | vim -

Der Befehl listet den Inhalt eines Ordners auf und leitet ihn an Vim weiter. Der geöffente Buffer könnte etwa so aussehen:

DSC0272.jpg
DSC0273.jpg
DSC0274.jpg
DSC0275.jpg
DSC0276.jpg
DSC0277.jpg
DSC0278.jpg

Diese Liste muss nun in Terminalbefehle ungewandelt werden. Mit folgenden Befehlen kann die nötig Änderung erreicht werden.

:%s/.*/mv -i "&" "anlass-"/g

Resultat:

mv -i “DSC0272.jpg” “anlass-“
mv -i “DSC0273.jpg” “anlass-“
mv -i “DSC0274.jpg” “anlass-“
mv -i “DSC0275.jpg” “anlass-“
mv -i “DSC0276.jpg” “anlass-“
mv -i “DSC0277.jpg” “anlass-“
mv -i “DSC0278.jpg” “anlass-“

:let i=1 | g/anlass\-/s//\='anlass-'.i/ | let i=i+1

Resultat:

mv -i “DSC0272.jpg” “anlass-1.jpg”
mv -i “DSC0273.jpg” “anlass-2.jpg”
mv -i “DSC0274.jpg” “anlass-3.jpg”
mv -i “DSC0275.jpg” “anlass-4.jpg”
mv -i “DSC0276.jpg” “anlass-5.jpg”
mv -i “DSC0277.jpg” “anlass-6.jpg”
mv -i “DSC0278.jpg” “anlass-7.jpg”

Endung anfügen:

:%s/\(\d\)"/\1.jpg"/g

Falls mehr als 10 Dateien unbenennt werden, muss noch ein Füllzeichen eingefügt werden, damit Sortierung bestehen bleibt.

:%s/-\(\d\).jpg/-0\1.jpg/g

Resultag:

mv -i “DSC0272.jpg” “anlass-01.jpg”
mv -i “DSC0273.jpg” “anlass-02.jpg”
mv -i “DSC0274.jpg” “anlass-03.jpg”
mv -i “DSC0275.jpg” “anlass-04.jpg”
mv -i “DSC0276.jpg” “anlass-05.jpg”
mv -i “DSC0277.jpg” “anlass-06.jpg”
mv -i “DSC0278.jpg” “anlass-07.jpg”

Wenn die Liste dem gewünschten Resultat entspricht, kann es mit folgendem Befehl dem Terminal zur Änderung übergeben werden:

:w !sh

oder

:%!bash

Die Änderung mit Vim ist zwar aufwändiger, bleibt aber kontrolierbar. Erst wenn man mit dem Resultat zufrieden ist, kann man den Befehl abschicken. Es können auch nur ein Teil der Dateien unbenannt, oder auf einige eine spezielle Regel angewandt werden.