Stefans Wiki



Alle Dateinamen eines Verzeichnises in Kleinbuchstaben umwandeln und Sonderzeichen entfernen

Problem

Für die leichte Handhabung von Dateien und Verzeichnissen, speziell in der Shell oder wenn man Dateien zwischen verschiedenen Betriebssystemen austauscht, ist es von Vorteil wenn die Dateinamen keine Sonderzeichen enthalten und nur Kleinbuchstaben benutzen. Liegen nun viele Dateien vor die einen unvorteilhaften Namen haben, so kann das umbenennen der einzelnen Dateien sehr zeitaufwendig und umständlich werden.

Ziel

Ein kleines Script das vollautomatisch sämtliche Dateien im aktuellen Verzeichnis entsprechend umbenennt.

Lösung

changefilenames

 1: #!/bin/sh
 2:
 3: for FILE in *; do
 4:     OLD=$FILE
 5:     FILE=$(echo $FILE | tr "[A-Z]" "[a-z]")
 6:     FILE=$(echo $FILE | sed "s/ä/ae/ig")
 7:     FILE=$(echo $FILE | sed "s/ö/oe/ig")
 8:     FILE=$(echo $FILE | sed "s/ü/ue/ig")
 9:     FILE=$(echo $FILE | sed "s/ß/ss/g")
10:     FILE=$(echo $FILE | sed "s/ /_/g")
11:     FILE=$(echo $FILE | sed "s/__/_/g")
12:     FILE=$(echo $FILE | sed "s/!//g")
13:     FILE=$(echo $FILE | sed "s/'//g")
14:
15:     # Punkt aus Dateiname entfernen
16:     if [ $# -ne 0 ]; then
17:         if [ "$1" == "-p" ]; then
18:             FILE=$(echo $FILE | sed 's/\.//g')
19:         fi
20:     fi
21:
22:     # Datei nur umbenennen falls sich Name aendert
23:     if [ "$OLD" != "$FILE" ]; then
24:         echo $OLD = $FILE
25:         mv "$OLD" "$FILE"
26:
27:         # Rechte execute zuruecknehmen
28:         if [ $# -ne 0 ]; then
29:             if [ "$1" == "-x" ]; then
30:                 if [ ! -d $FILE ]; then
31:                     chmod -x "$FILE"
32:                 fi
33:             fi
34:         fi
35:     fi
36: done

Erklärung

Mit einer For-Schleife wird jeder Dateiname (egal ob Datei oder Verzeichnis) im aktuellen Verzeichnis in der Variabel $FILE abgespeichert. Mit Hilfe des Kommandozeilenprogramms tr wird der Dateiname in Kleinbuchstaben umgewandelt. Danach werden mit den Kommandozeilenprogramm sed die einzelnen Sonderzeichen aus dem Dateinamen ersetzt oder entsprechend entfernt. Nun wird kontrolliert ob der neue Dateiname sich zum original Dateinamen geändert hat. Ist dies der Fall, so wird die Datei umbenannt.

Folgende Parameter sind für das Script möglich:

  • -p = Entfernt auch alle Punkte aus dem Dateinamen.
  • -x = Entfernt die Rechte Execute von der Datei (nicht Verzeichnisse).
unix/shell/alle_dateinamen_eines_verzeichnises_in_kleinbuchstaben_umwandeln_und_sonderzeichen_entfernen.txt · Zuletzt geändert: 24.03.2011 22:05 (Externe Bearbeitung)
Quelle: http://stefanjahn.de/unix:shell:alle_dateinamen_eines_verzeichnises_in_kleinbuchstaben_umwandeln_und_sonderzeichen_entfernen
Webseite: http://stefanjahn.de