Computerhilfen.de Logo
Forum
Tipps
News

Andere: Script um Namen zu ändern

Hallo Linux Community!

Ich bin gerade dabei mich in das Linux System einzuarbeiten. Nun habe ich festgestellt, dass etliche meiner Backup-Daten (mp3s, etc) in grossen Buchstaben geschrieben sind. Da ich ungern sämtliche Dateien einzeln umbenennen möchte, wollte ich fragen, ob jemand einen Befehl oder ein Shell Script kennt, mit dem man Dateinamen von Großbuchstaben in Kleinbuchstaben automatisch umwandeln kann?! Der Übersicht halber fände ich es so besser.
Wäre nett wenn mir da jemand helfen könnte!
Daniel


Antworten zu Andere: Script um Namen zu ändern:

Müßte so funktionieren, hatte aber keine Lust zum Testen:

ls -1 | while read file; do mv $file $(echo $file | tr [:upper:] [:lower:]); done
Der Parameter von ls ist die Zahl "1" -> kein kleines L

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

ls | awk '{print "mv "$0" "tolower($0)}' | sh

Funktionieren natürlich auch beide  ;)

musstens denn gleich wieder zwei sein? ;D

Hallo!
Vielen Dank euch beiden.

Ich bin nun so vorgegangen:

Knuts Zeile

 

Zitat

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

habe ich in einen editor eingefügt (vorher #!/bin/bash) und mit chmod +x ausführbar gemacht.
Wenn ich nun allerdings dieses Script anwende erscheint in der Konsole die Meldung:

mv: target `largo.ogg' is not a directory
...

Diese Fehlermeldung erscheint zu jeder Datei.
Gleiches gilt, wenn ich diesen Code direkt in der Konsole eingebe.
Wie kann man das umgehen?
Danke!
Daniel

Vermutlich biste im falschen Verzeichnis? Wechsle in das Verzeichnis, in dem die Dateien liegen und rufe die Zeile nochmal auf. Oder gib die Pfade im Script an. 

Hallo SQL-Freak.

Danke für die Antwort.
Ich bin schon im richtigen Verzeichnis.

z.B. ~/music/classic

Von dort starte ich dann das Script und die o.g. Fehler kommen.
Apropos Script, ist es denn so überhaupt richtig:

 #!/bin/bash

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


Oder fehlt da noch etwas?

Danke!

Nö, ist alles richtig, ist auch kein Schreibfehler drin.

Schau mal mit ls nach, ob die Dateien vllt. schon umbenannt sind.
 

Hallo.

Nö...die sind alle noch groß geschrieben.

Hier mal ein Ausschnitt:

11 - In einem khlen Grunde.mp3
Antonio Vivaldi - Vier Jahreszeiten - Winter II  Winter Largo.ogg
o holy night.ogg
prague philharmonic orchestra - we have all the time in the world.ogg

Wenn ich nun in dem Verzeichnis, also in

~/music/classic$:

dieses Script aufrufe, passiert nüscht, bzw. die Fehlermeldung erscheint.

 ??? ???

Sind das die Originalnamen - inkl. der Leerzeichen?

Ich habe diese Titel von Amazon heruntergeladen, bzw. eigene CDs gerippt.
Die Namen erschienen dann so, inklusive Leerzeichen.
Ich habe eben auch die anderen Befehle von euch versucht. Bei jedem erscheint die gleiche Meldung.

Hallo.

Nun  habe ich einen Perlbefehl abgesetzt

perl -e 'for (@ARGV) { rename $_, lc($_) ; }' *

und siehe da es funktioniert.

Wieso klappte das nicht via Shell Script?
Kann ich diesen Perlbefehl auch als Script abspeichern und dann ausführen?
 

Erstmal ja, mit der Endung .pl kannste das Perl-Script abspeichern.

Auf der Shell machten die Leerzeichen dem mv-Befehl Probleme, gibt da auch ein paar "Hilfsmittel", z.B. Quotieren oder sed einsetzen oder auch noch paar andere.
mv verlangt als Parameter die Quell- und Zieldateien getrennt durch ein Leerzeichen, sind es mehrere, wird am Ende ein Verzeichnis erwartet.
Wenn Du jetzt z.B. die Datei "o holy night.ogg" nimmst, versucht mv "o" und "holy" in das Verzeichnis "night.ogg" zu verschieben. Also kommt dann da nur Stuss rum. ;)

Hallo SQL-Freak!

Das mit dem Perlscript hat nun geklappt!

Ausserdem habe ich mal zu Testzwecken ein paar Dateien mit Bindestrichen angelegt und versucht diese dann mit den vorherigen Shell-Befehlen umzubennnen: klappt prima!

Also heisst das für mich, dass ich nun Wörter innerhalb eines Dateinamens mit Bindestrichen (oder Unterstrichen) versehen muss, z.B. o-holy_night (ist übrigens ein wunderschönes Weihnachtslied  ;) )?
Das klingt aber auch sehr kompliziert...
Irgendwie muss doch eine Musikcollection einfacher zu sortieren sein?!  :o ???
Danke ersteinmal!

Nee, ist nicht so kompliziert, lösen wir am einfachsten mit IFS und 'ner Sub-Shell:

#!/bin/bash
(IFS=`echo -e "\n"`
ls -1 | while read file;
do mv $file $(echo $file | tr [:upper:] [:lower:])
done)

Aber wenn Du das auf der Befehlszeile so machst, nicht die runden Klammern vergessen, sonst hast Du Stress.  ;)
Die Leerzeichen im Namen bleiben auf diese Weise erhalten.

Dann wäre meine zweite Zeile sinniger gewesen , wenn dort Unmengen an Leerzeichen drin sind
 

ls | awk '{print0 "mv "$0" "tolower($0)}' | sh
kleine Änderung  print0

Über sinniger läßt sich sicher trefflich streiten, aber ich bezweifle, dass unser TO dieses Ergebnis haben will  ;D allerdings gibt's keine Fehlermeldung sondern für jedes Wort eine einzelne Datei.  ;)

Hallo SQL-Freak!

Danke für die Hilfe!

Habe dieses-deines

 

Zitat
#!/bin/bash
(IFS=`echo -e "\n"`
ls -1 | while read file;
do mv $file $(echo $file | tr [:upper:] [:lower:])
done)

nun als script vorliegen.

Works like charm!!  ;D;)

Danke!

*closed*

« Linux / Unix: SpieleDebian: Debian Freeradius Server erstellen »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!