www.bimminger.at

Tipps / Linux

Linux

Umbenennen von Dateien unter Linux mit Schleifen


Wenn man mehrere Dateien umbenennen möchte, aber keine Programme wie rename zur Verfügung hat, so sollte man sich auf der Konsole kurz mit FOR-Schleifen auseinandersetzen. Bei nur einer Datei oder wenn rename vorhanden ist, kann man Dateien unter Linux einfach umbenennen.

Eine simple Programmschleife für das Umbenennen mehrerer Dateien:

for i in *.jpg; do mv $i ${i%.jpg}_neu.jpg; done

Bei diesem Beispiel werden alle .jpg Dateien in "altername_neu.jpg" umgewandelt. Die Linux Shell erlaubt solche kompakte Programmschleifen in einer einachen Befehlsaufforderung.

Zum leichteren Verständnis noch ein Beispiel:

for i in DSC*; do mv $i 2002_10_14-${i#DSC}; done

Das Beispiel benennt alle DSC* Dateien in 2002_10_14_bild_*.jpg um.

Leerzeichen in der Datei


Wenn aber jetzt Leerzeichen in der Datei vorkommen, muss man mit Anführungszeichen arbeiten (Bsp.: DSC 23.jpg).

for i in "DSC "*.jpg; do mv "$i" "2005_05_-${i#DSC}"; done


Wenn man Dateien mit Leerzeichen nicht unter Anführungszeichen setzen, kommen Fehlermeldungen wie diese "Beim Verschieben mehrerer Dateien muß das letzte Argument ein Verzeichnis sein" zu Stande.

Fortlaufende Nummern


Fortlaufende Nummern beim Umbenennen kann man ebenfalls mit Hilfe von Schleifen vergeben, wenn man eine Variable mitzählen läßt.

let a=1; for i in DSC*.jpg; do let a=a+1; mv $i 2005_05_$a.jpg; done 


Die Anzeige der Nummer kann auch formatiert werden. Dazu kann man auf printf zurückgreifen:

let a=0; for i in DSC*.jpg; do let a=a+1; b=`printf 2005_05_%03d.jpg $a`; echo "mv $i $b"; done

In diesem Beispiel wird dreistellig gezählt (001, 002, ...)

Erweitern mit anderen Programmen


Mit dieser Basis lassen sich natürlich die unterschiedlichsten Dinge anstellen. Hier noch kurz zwei Beispiele:

Ersetzen mit sed


Wer gerne mit sed arbeitet kann natürlich hier auch reguläre Ausdrücke ins Spiel bringen. Der Einfachheit halber aber nur ein sehr einfaches Beispiel:

for i in *.jpg; do b=`echo $i | sed "s/ dieser viel zu lange Urlaubsname muss weg / /"`; mv "$i" "$b";done

Groß- und Kleinbuchstaben mit tr


Einfach mal alles auf Kleinbuchstaben bringen ist natürlich auch mit einer derartigen Schleife möglich:

for i in *.jpg; do b=`echo $i | tr [:upper:] [:lower:]`; mv "$i" "$b";

Umbenennen unter Linux mit Rename und mv

Umbenennen von einzelnen Dateien unter Linux oder von mehreren mit Rename.


Umbenennen unter Windows

Querverweis auf einen Tipp zum Umbenennen unter Windows.





Um einen Diskussionsbeitrag zu posten müssen Sie eingeloggt sein.