On Son, Mai 27, 2001 at 02:40:01 +0200, Bernhard Walle wrote:
On Sun, 27 May 2001 at 14:13 +0200, Joachim Mild wrote:
kann mir einer sagen wie Dateien und Verzeichnisse die in Großbuchstaben geschrieben sind, in Kleinbuchstaben umwandeln kann?
Dafür gibt's ziemlich viele Möglichkeiten. Z. B. alle Dateien im Verzeichnis (ein Verzeichnis ist auch eine Datei):
for i in * ; do mv $i `echo $i | tr [[:lower:]] [[:upper:]]` ; done ^ ^ das sind Backticks und keine Hochkommata
Nebenbei: Was haben die doppelten [[ und ]] für einen Hintergrund? Das klappt doch auch mit einfachen [ und ], oder? Bei mir jedenfalls tut es das. Jedesmal wenn die Frage kommt (dürfte ca. 1x pro Monat sein - schau mal ins Archiv ;-), der gleiche Kommentar von mir: Die o. g. Kurzversion klappt nur dann sauber, wenn es in diesem Verzeichnis (bzw. allgemein gesprochen in der Auswahl der zu konvertierenden Dateien) keine Dateien gibt, die nur Kleinbuchstaben im Dateinamen haben! Wenn das nicht sicher ist, hagelt es Fehlermeldungen. Also lieber ein wenig mehr Aufwand: Variante 1: Keine Dateien in die Auswahl, die nur aus Kleinbuchstaben bestehen: for i in *[A-Z]* ; do mv $i `echo $i | tr [:lower:] [:upper:]` ; done Variante 2: Prüfen, ob der neue Dateiname gleich dem alten ist: for i in * ; do n=`echo $i | tr [:lower:] [:upper:]` test $n = $i || mv $i $n done Beide Varianten haben immer noch den Nachteil, dass es rappelt, wenn zufälligerweise eine Datei besteht, deren Dateiname dem umgewandelten einer Großbuchstabendatei *g* entspricht. Um sicher zu gehen, dass nichts überschrieben wird, kann man das kombinieren. Variante 3: for i in *[A-Z]* ; do n=`echo $i | tr [:lower:] [:upper:]` test -f $n && echo $n gibt es schon || mv $i $n done Die Variante unterscheidet sich in der Funktion zwar nicht von Bernhards Kurzfassung, aber man kann statt des echo ... ja auch eine andere Aktion einbauen (also z. B. einen neuen Dateinamen vergeben). Jan