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