Good to Know Database

Schreibweise von Dateien und Verzeichnissen ändern


Wie Sie sicher bereits wissen, unterscheidet Linux im Gegensatz zu Windows sehr wohl zwischen Groß- und Kleinschreibung bei Datei- und Verzeichnisnamen. Wenn Sie unter Linux mehrere Dateien und Verzeichnisse einheitlich in Kleinbuchstaben umwandeln wollen, hilft Ihnen der folgende Befehl weiter.

[georg@centos5 ~]$ for i in *; do mv -i $i $(echo $i | tr [A-ZÄÖÜ] [a-zäöü]); done

Damit die Datei- und Verzeichnisnamen in Großbuchstaben umgewandelt werden, müssen Sie nur die beiden regulären Ausdrücke vertauschen.

[georg@centos5 ~]$ for i in *; do mv -i $i $(echo $i | tr [a-zäöü] [A-ZÄÖÜ]); done

Mit den beiden Befehlen werden jedoch nur die Dateien und Verzeichnisse im aktuellen Verzeichnis umgewandelt.

Sollen auch alle Unterverzeichnisse und die darin enthaltenen Dateien in die Kleinschreibung umgewandelt werden, müssen Sie den Befehl wie folgt erweitern.

[georg@centos5 ~]$ for d in $(seq 5); do for i in $(find . -maxdepth $d -mindepth $d); do mv -i $i $(echo $i | tr [A-ZÄÖÜ] [a-zäöü]) 2>/dev/null; done; done

Beziehungsweise den folgenden Befehl für die Verwendung von Großbuchstaben einsetzen.

[georg@centos5 ~]$ for d in $(seq 5); do for i in $(find . -maxdepth $d -mindepth $d); do mv -i $i $(echo $i | tr [a-zäöü] [A-ZÄÖÜ]) 2>/dev/null; done; done

Da die letzten beiden Befehle auf den ersten Blick vielleicht schwer zu verstehen sind, möchte ich versuchen Sie etwas zu erklären.

Die letzten beiden Befehle bestehen aus zwei ineinander verschachtelten For-Schleifen. Das heißt, bei jedem Durchlauf der äußeren Schleife wird die innere Schleife erneut ausgeführt. Die äußere Schleife besteht im Grunde aus dem folgenden Befehl.

for d in $(seq 5); do ... done

Sie sorgt dafür, dass die Variable $d einen fortlaufenden Index für die innere Schleife zur Verfügung stellt und diese für jeden Index einmal ausführt. In diesem Fall zählt die Schleife von 1 bis 5.

Die innere Schleife besteht aus den folgenden Befehlen.

for i in $(find . -maxdepth $d -mindepth $d); do mv -i $i $(echo $i | tr [A-ZÄÖÜ] [a-zäöü]) 2>/dev/null; done

Zuerst wird der For-Schleife eine Liste mit allen Datei- und Verzeichnisnamen übergeben.

$(find . -maxdepth $d -mindepth $d)

Wie Sie sehen, wird hier die Variable $d von der äußeren Schleife eingesetzt um die minimale und maximale Verzeichnisebene anzugeben. Dies hat den Hintergrund, dass wir immer nur die Datei- und Verzeichnisnamen von einer Ebene umbenennen können.
Wird zum Beispiel nur eine Liste mit allen Dateien und allen Unterverzeichnissen erstellt, wird zwar der Name des übergeordneten Verzeichnisses umgewandelt, aber alle darunterliegenden Dateien und Verzeichnisse können nicht mehr umbenannt werden, weil sich der Pfad geändert hat und die übergebenen Dateien und Verzeichnisse nicht mehr existieren.
Aus diesem Grund benötigen wir die äußere Schleife welche festlegt, wie viele Ebenen umbenannt werden sollen.

In diesem Beispiel werden somit alle Dateien und Verzeichnisse im aktuellen Verzeichnis und in maximal vier darunterliegenden Ebenen umgewandelt. Wollen Sie weiter in der Verzeichnishirarchie nach unten gehen, müssen Sie das Argument des Befehls seq in der äußeren Schleife anpassen.

In der inneren Schleife erfolgt mit dem folgenden Befehl die Umwandlung der Datei- und Verzeichnisnamen.

mv -i $i $(echo $i | tr [A-ZÄÖÜ] [a-zäöü]) 2>/dev/null

Die Umleitung der Standard-Fehlerausgabe wird hier nur benötigt, damit Fehlermeldungen bei bereits in der richtigen Schreibform vorhanden Dateien und Verzeichnissen nicht angezeigt werden.

Ich hoffe Sie können jetzt die Funktion der letzten beiden Befehle nachvollziehen.

Wollen Sie überprüfen ob wirklich alle Datei- und Verzeichnisnamen rekursiv in Klein- beziehungsweise Großbuchstaben umgewandelt wurden, suchen Sie einfach mit einem der folgenden Befehlen nach Ausreißern.

[georg@centos5 ~]$ find . | egrep [a-zäöü]

[georg@centos5 ~]$ find . | egrep [A-ZÄÖÜ]


Dieser Eintrag wurde am 24.01.2009 erstellt und zuletzt am 22.02.2012 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_7_479.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer