it-swarm.com.de

Wie benenne ich alle Dateien in Kleinbuchstaben um?

Ich habe zum Beispiel TREE.wav, ONE.WAV. Ich möchte es in tree.wav umbenennen, one.wav. Wie benenne ich alle Dateien in Kleinbuchstaben um? 

98
Voloda2

Wenn Sie mit dem Terminal zufrieden sind:

  1. Öffnen Sie Terminal.app, geben Sie cd ein und ziehen Sie den Ordner mit den umzubenennenden Dateien in das Fenster.
  2. Um zu bestätigen, dass Sie im richtigen Verzeichnis sind, geben Sie ls ein und drücken Sie die Eingabetaste.
  3. Fügen Sie diesen Code ein und drücken Sie die Eingabetaste:

    for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
    
  4. Geben Sie ls ein, und drücken Sie erneut die Eingabetaste.

(Vielen Dank an @bavarious auf Twitter für ein paar Korrekturen und John Whitley, der dies für sicherere Dateisysteme ohne Berücksichtigung der Groß- und Kleinschreibung gemacht hat.)

321
wjl

Die gestellte Frage ist allgemein und auch wichtig, daher möchte ich eine allgemeinere Antwort geben:

Einfachster Fall (meistens sicher und unter Mac OS X, aber lesen Sie weiter):

for i in * ; do j=$(echo "$i" | tr '[:upper:]' '[:lower:]') ; mv "$i" "$j" ; done

Sie müssen auch Leerzeichen in Dateinamen (jedes Betriebssystem) behandeln:

IFS=$'\n' ; for i in * ; do j=$(echo "$i" | tr '[:upper:]' '[:lower:]') ; mv "$i" "$j" ; done

Sie müssen sicher mit Dateinamen umgehen, die sich in einem von Groß- und Kleinschreibung abhängigen Dateisystem nur von Fall zu Fall unterscheiden und das Ziel (z. B. Linux) nicht überschreiben:

for i in * ; do j=$(echo "$i" | tr '[:upper:]' '[:lower:]') ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done 

Hinweis zu Mac OS X:

Das Dateisystem von Mac unterscheidet nicht zwischen Groß- und Kleinschreibung.

Es ist jedoch nicht erforderlich, temporäre Dateien zu erstellen, wie in der akzeptierten Antwort und in den Kommentaren vorgeschlagen, da zwei Dateinamen, die sich nur von Fall zu Fall unterscheiden, zunächst nicht existieren können, ref .

Um dies zu zeigen:

$ mkdir test
$ cd test
$ touch X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 X
$ mv X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 x
0
Alex Harvey