Mehrere Dateien umbenennen

Mehrere Dateien in einem Rutsch umzubenennen, hört sich einfacher an als es ist. Als ich das erste mal vor dieser »haben wir gleich« Aufgabe stand, war ich am Ende doch überrascht, was ich alles zu Gesicht bekommen habe. Da haut es einem die regulären Ausdrücke und for-Schleifen nur so um die Ohren. Jetzt stand ich nach langer Zeit wieder mal vor dem Problem und musste vermutlich wieder länger suchen, als ich gebraucht hätte die Dateien einzeln umzubenennen. Deshalb habe ich mir hier mal ein paar Beispiele zusammen geschrieben, damit ich beim nächsten mal schon mal ein paar Ansätze habe, die nur noch angepasst werden müssen.

# for i in *_1*.txt; do mv "$i" `echo $i | sed 's/_1/_2/'`; done

Dieser Befehl tauscht im aktuellen Verzeichnis in allen txt-Dateien alle »_1« gegen »_2« aus. Die Stelle an der der auszutauschende String steht ist dabei unerheblich, solange er vor dem Suffix kommt.


# for i in *_1*.txt; do mv "$i" `echo $i | tr '_1' '_2'`; done

Dieser Befehl das gleiche wie der erste, nur wird hier »tr« statt »sed« verwendet.


# for i in test*.txt; do mv "$i" "${i%.*}".rtf; done

Dieser Befehl ändert das Suffix aller txt-Dateien in »rtf«.


# for i in *test*; do mv "$i" _"${i%}"; done

Dieser Befehl stellt allen Dateien in deren Dateinamen der String »test« vorkommt einen Unterstrich »_« voran.


# for i in *.tgz; do mv "$i" "${i/.tgz}".tar.gz; done

Dieser Befehl schneidet in allen tgz-Dateien das Suffix ab und hängt ein ».tar.gz« wieder dran.


# ls | cat -n | while read n f; do mv "$f" "spoiler_$f"; done;

Dieser Befehl fügt bei vorhandenen Ordner, einen Text vor jedem Ordner.
pronto 2010/11/21 12:26