• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Dateien umbenennen rekursiv[gelöst]

Hallo,

ich habe gestern gelernt, dass man viele Dateien nicht so einfach umbenennen kann, weil die bash die Wildcard * expandiert. Stattdessen benutzt man eine Schleife:
Code:
for i in *.mp3~; do mv "$i" "${i/.mp3~}".mp3; done
Wie mache ich das jetzt aber, wenn ich alle Dateien in allen Unterverzeichnissen umbenennen möchte, nicht nur im aktuellen Verzeichnis ? :???:

Vielen Dank schon mal!
 
A

Anonymous

Gast
Dateien massenweise umbenennen haben wir hier schon dutzende Male gehabt. siehe nur zB.
http://www.linux-club.de/viewtopic.php?f=21&t=59614&p=342758
http://www.linux-club.de/viewtopic.php?f=21&t=26005
Die Frage ist nur was ist heute mal wieder umzubennenen, die Leerzeichen, die Sonderzeichen, die Webadressen aus den Namen streichen, die Endungen umbenennen usw. Alle diese Lösungen sind leicht auch auf ein anderes Problem umzustellen.

Die Frage ist immer nur was sind alles für "seltsame" Datei und Verzeichnisnamen auf dem Rechner. Um alle theoretisch vorkommenden Anomalien an Dateinamen wirkllich sicher abzufangen, müsste man ein ziemlich komplexes Script schreiben. Oftmals reicht sowas hier aus

Code:
find -type ? -name ?.? | while read DATEI
do
  DATEI_NEU=`Befehl "$DATEI" | FILTER irgendwas`
  mv "$DATEI" "$DATEI_NEU"
done

andere Möglichkeit, wenn man schon eine Befehlszeile hat die in genau einem Verzeichnis 100% korrekt arbeitet, mit Hilfe einer Schleife auf alle Unterverzeichnisse wechseln und dort diesen Befehl ausführen. (Achtung folgendes ist nur vereinfacht und muss eventuell präziser geschrieben werden, da hier die Gefahr besteht, wenn in einem Verzeichnis keine ausreichenden Rechte sind, dass die ganze Befehlsschleife in einen anderen Verzeichnisbereich ausbricht oder massenweise Fehler produziert)

Code:
find . -type d |  while read VERZEICHNIS
do
  cd "$VERZEICHNIS"
  DEIN BEFEHL der das VERZEICHNIS BEARBEITEN KANN
  cd -
done
Weiter Möglichkeit (jedoch mehr was für erfahrene User und Scriptprogrammierer bei bestimmten Problemstellungen) ein Rekursiver Funktionsaufruf.

Wichtigstes: immer erst die Befehlsfolge entwicklen und dabei nur den Befehl zur Änderung der Dateien mit echo ausgeben lassen, erst wenn das wirklich alles sauber funktioniert dann den Befehl erst scharf schalten.

robi
 
Vielen Dank für die detailierte und vor allem faire Antwort, obwohl ich ja über die Suche was hätte finden müssen. Die Frage ging eigentlich von einem rsync Problem aus. Ich hab dann bei neuen Teilproblemen jeweils einen neuen Thread aufgemacht. Und ich gestehe, bei diesem dann ohne vorher zu suchen. :eek:ps:
 
Oben