Ich habe zum Beispiel TREE.wav, ONE.WAV. Ich möchte es in tree.wav, one.wav umbenennen. Wie benenne ich alle Dateien in Kleinbuchstaben um?
Ich habe zum Beispiel TREE.wav, ONE.WAV. Ich möchte es in tree.wav, one.wav umbenennen. Wie benenne ich alle Dateien in Kleinbuchstaben um?
Antworten:
Wenn Sie mit dem Terminal vertraut sind:
cd
den Ordner mit den umzubenennenden Dateien ein und ziehen Sie ihn in das Fenster.ls
und drücken Sie die Eingabetaste.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
ls
und drücken Sie erneut die Eingabetaste.(Vielen Dank an @bavarious auf Twitter für einige Korrekturen und an John Whitley unten, der dies für Dateisysteme ohne Berücksichtigung der Groß- und Kleinschreibung sicherer gemacht hat.)
foo.txt
und haben FOO.TXT
, kann dies eine davon beschädigen.
mv "$f" "${f,,}"
oderdeclare -l g=$f; mv "$f" "$g"
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
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=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Sie müssen auch Leerzeichen in Dateinamen (jedes Betriebssystem) verarbeiten:
IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Sie müssen Dateinamen, die sich in einem Dateisystem mit Groß- und Kleinschreibung nur von Groß- und Kleinschreibung unterscheiden, sicher behandeln und das Ziel nicht überschreiben (z. B. Linux):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
Hinweis zu Mac OS X:
Das Mac-Dateisystem unterscheidet nicht zwischen Groß- und Kleinschreibung und bewahrt die Groß- und Kleinschreibung.
Es ist jedoch keine Notwendigkeit , temporäre Dateien zu erstellen, wie sie in der akzeptierte Antwort und Kommentare vorgeschlagen, weil zwei Dateinamen , die nur von Fall unterscheiden sich nicht in erster Linie existieren, 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