Hallo, Am Mit, 11 Feb 2009, Axel Birndt schrieb:
David Haller schrieb: ...
der mir bei allen Dateien eines Verzeichnisses die Leerzeichen im Filenamen durch Unterstrich ersetzt. Wie geht das?
while mmv '* *' '#1_#2'; do :; done
ich will ja jetzt nicht klugsch... hier, aber "mmv" sollte doch bestimmt "mv" heißen, oder?
Nein. 'mmv' = "multiple move'. Das verwendet die auf die Wildcards Teile des Dateinamens aus der Quelle anstelle von #1 ... im Ziel.
By the way: "do :; done" ? Ist hier der Doppelpunkt der Null, oder Leeroperator? Er macht einfach nichts und läuft so lange durch die Schleife, bis alle "mv"'s im Header abgearbeitet sind?
mmv liefert '0' (also wahr) als exit-code, solange es umbenennen kann. Findet es keine Dateien mit Leerzeichen mehr liefert es 1 (false) und die Schleife wird beendet. Einfach mal mit 'while mmv -v ...' aufrufen. Das ist zwar nicht die effektivste Methode, die Dateien werden mehrfach umbenannt, das dürfte aber weitgehend im Dateisystemcache stattfinden, falls es nicht gar zu viele Dateien sind. Und es wird jew. nur 1 mmv pro Schleifendurchlauf aufgerufen, d.h. die Schleife läuft so oft wie die maximale Anzahl Leerzeichen in einem der Dateinamen. Die "traditionelle" Schleife über die Dateien und das Verwenden von sed für die Zeichenersetzung ist aufwendiger. $ ls *\ * | wc -l 4004 $ time while mmv '* *' '#1_#2'; do :; done * * -> #1_#2 : no match. Nothing done. real 0m12.742s user 0m0.170s sys 0m12.540s $ while mmv '*_*' '#1 #2' ; do :; done [..] $ time for f in *\ *; do t="$(echo "$f" | sed 's/ /_/g')"; \ mv -i "$f" "$t"; done real 1m12.958s user 0m22.780s sys 0m48.970s $ while mmv '*_*' '#1 #2' ; do :; done [..] $ time for f in *\ *; do t="${f// /_}"; mv -i "$f" "$t"; done real 0m33.735s user 0m11.080s sys 0m21.910s Da sieht man, wie "teuer" das aufrufen des "mv" bzw. sed ist. Bzw. wie günstig meine "abwegige" Variante mit dem mehrfachen umbenennen einer Datei (je einmal pro Leerzeichen) per mmv ist ;) HTH, -dnh -- Ich habe festgestellt, wenn man die Finger in die Ohren steckt und laut summt löst das eine ganze Menge von Problemen. -- Brig. Gen. Jack O'Neill -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org