Dateien mit Leerzeichen automatisch in einem Rutsch umbenennen
Hallo Liste, ich verwende fdupes, um doppelte Dateien zu finden und zu löschen. Das Tool ist ideal, nur nicht mehr bei hunderten/tausenden Dateien. Mit |xargs rm möchte ich nun alle doppelten Dateien automatisch löschen lassen. Leider funktioniert das nicht ganz, wie gewünscht. Das Problem sind offenbar viele Dateinamen, die Leerzeichen enthalten. Nun suche ich irgendein Tool, um dieses Umbenennen rekursiv in allen Unterverzeichnissen automatisch ablaufen zu lassen. K3B bietet zwar hier eine Möglichkeit beim DVD Brennen, doch die DVD fasst nun mal nur ca. 4,4 GB an Daten und da bin ich mit 7,1 GB weit drüber. Welches Tool oder Script könnte hier helfen? TIA Schöne Grüße Mathias -- 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
Mathias Klose, Donnerstag, 25. September 2008 22:44:
Nun suche ich irgendein Tool, um dieses Umbenennen rekursiv in allen Unterverzeichnissen automatisch ablaufen zu lassen.
find /pfad/zu/dateien | while read xx; do mv "$xx" "$(echo $xx | tr ' ' _)" done Ungetestet! -- Andre Tann -- 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
Hi Mathias! On Thu, 25 Sep 2008, Mathias Klose wrote:
ich verwende fdupes, um doppelte Dateien zu finden und zu löschen. Das Tool ist ideal, nur nicht mehr bei hunderten/tausenden Dateien.
Mit |xargs rm möchte ich nun alle doppelten Dateien automatisch löschen lassen. Leider funktioniert das nicht ganz, wie gewünscht. Das Problem sind offenbar viele Dateinamen, die Leerzeichen enthalten.
Warum rufst Du nicht fdupes mit der --delete Option auf? Ansonsten klingt das nach einem Wordsplit Problem. Sowas sollte eigentlich funktionieren: fudpes -f . | xargs -i rm {} oder fdupes -f . | while IFS= read -r name; do rm -f "$name"; done
Nun suche ich irgendein Tool, um dieses Umbenennen rekursiv in allen Unterverzeichnissen automatisch ablaufen zu lassen.
find . -type f -name "* *" | while IFS= read -r name; do test -e "${name// /_}" || mv "$name" "${name// /_}"; done Mit freundlichen Grüßen Christian, alles ungetestet... -- BLACK KNIGHT: The Black Knight always triumphs. Have at you! ARTHUR takes his last leg off. The BLACK KNIGHT's body lands upright. BLACK KNIGHT: All right, we'll call it a draw. "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD -- 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
Hi Christian, Christian Brabandt schrieb:
Warum rufst Du nicht fdupes mit der --delete Option auf?
fdupes mit -d oder --delete erzeugt bei jeder Doublette eine Eingabeaufforderung. Genau das wollte ich vermeiden. Grüße Mathias -- 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
Hi Mathias! On Fri, 26 Sep 2008, Mathias Klose wrote:
Christian Brabandt schrieb:
Warum rufst Du nicht fdupes mit der --delete Option auf?
fdupes mit -d oder --delete erzeugt bei jeder Doublette eine Eingabeaufforderung. Genau das wollte ich vermeiden.
Ach so. Wenn Du weißt was du tust, dann mach halt:
yes 1 | fdupes . --delete
Mit freundlichen Grüßen
Christian
--
It is too bad that the speed of light hasn't kept pace with the
changes in CPU speed and network bandwidth. --
Hi Christian, vielen Dank für deine Nachricht. Christian Brabandt schrieb:
Ach so. Wenn Du weißt was du tust, dann mach halt:
yes 1 | fdupes . --delete
Hmmm... damit würde fdupes einfach alle Eingabeaufforderungen mit YES beantworten. Doch genau hier kommt das Prolem mit den Leerzeichen im Dateiname zum Tragen und fdupes bzw. eher xargs verweigert das Löschen der Datei. Mir geht es nicht um die Frage "alle löschen", weil das mit |xargs rm gelöst werden kann. Das Problem sind die Dateien mit Leerzeichen im Dateinamen, die xargs nicht akzeptiert. Ich muss offenbar die Dateien mit Leerzeichen im Dateinamen für xargs umbenennen, damit es funzt. Da es tausende Files sind, suche ich ein Tool zum automatischen Umbenennen. HTH+TIA Schöne Grüße Mathias -- 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
Hallo, Am Fre, 26 Sep 2008, Mathias Klose schrieb:
Mir geht es nicht um die Frage "alle löschen", weil das mit |xargs rm gelöst werden kann.
Das Problem sind die Dateien mit Leerzeichen im Dateinamen, die xargs nicht akzeptiert.
Tut es. Aber nicht so wie du sie übergibst. Siehe die anderen Mails. Am besten wäre es, du läßt fdupes die Dateinamen ASCII-NUL getrennt ausgeben, dann verwende | xargs -r -0 rm Hm. Ich sehe grad, fdupes kann das bisher nicht. Ich hab mal eben einen Patch gebastelt und auch ein .src.rpm. Bei Interesse PM. Bzw. evtl. leite ich das an den Upstream weiter. Mit dem Patch geht dann: fdupes -0 . | xargs -0 ls (ls statt rm wg. test ;) Die Option '-0' impliziert '-f1'. HTH, -dnh -- The only possible interpretation of any research whatever in the "social sciences" is: some do, some don't. -- Ernest Rutherford -- 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
Hallo, David Haller schrieb:
Ich hab mal eben einen Patch gebastelt und auch ein .src.rpm. Bei Interesse PM. Bzw. evtl. leite ich das an den Upstream weiter.
Mit dem Patch geht dann:
fdupes -0 . | xargs -0 ls
(ls statt rm wg. test ;) Die Option '-0' impliziert '-f1'.
Lieben Dank für die Mühe. Das wird mir so jedoch etwas zu kompliziert. Da fdupes mit |xargs rm gut arbeitet, brauche ich wirklich nur vorab die Dateien mit Leerzeichen im Dateinamen umbenennen. Das hab ich dann mit krename mit Erfolg probiert. Die Kombination von krename und fdupes/xargs hat meine Wünsche erfüllt. Einzigster Wermutstropfen: krename arbeitet furchtbar langsam. -- 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
Hallo, Am Mon, 29 Sep 2008, Mathias Klose schrieb:
David Haller schrieb:
Ich hab mal eben einen Patch gebastelt und auch ein .src.rpm. Bei Interesse PM. Bzw. evtl. leite ich das an den Upstream weiter.
Mit dem Patch geht dann:
fdupes -0 . | xargs -0 ls
(ls statt rm wg. test ;) Die Option '-0' impliziert '-f1'.
Lieben Dank für die Mühe. Das wird mir so jedoch etwas zu kompliziert.
Wieso? Fändest du die Option in fdupes doof? Oder was? Für ne 10.2 und (IIRC[1]) Athlon Prozessor hätte ich dir sogar ein binary-RPM. Ggfs. ist aber ein "generisches" 10.2 / i586 RPM ruckzuck (1 min!) kompiliert. Nur halt zum weiterverbreiten und andere Distris is das nich so toll. Wobei auf RPM-basierten ein simples 'rpmbuild --rebuild' reichen sollte.
Da fdupes mit |xargs rm gut arbeitet, brauche ich wirklich nur vorab die Dateien mit Leerzeichen im Dateinamen umbenennen.
Und die mit Tabs. Und die mit Zeilenumbrüchen. Und die mit Fragezeichen. Und die mit Sternchen. Mindestens. Denk nochmal nach (für's nächste Mal), ob dich der fdupes-patch wirklich nicht interessiert (d.h. ob der patch ins "normale" fdupes rein sollte). Oder zumindest in z.B. ein packman-RPM von fdupes... Ich selber kenne und verwende fdupes bisher nicht, kann das also nicht beurteilen.
Das hab ich dann mit krename mit Erfolg probiert.
Die Kombination von krename und fdupes/xargs hat meine Wünsche erfüllt. Einzigster Wermutstropfen: krename arbeitet furchtbar langsam.
while mmv '* *' '#1_#2'; do :; done while mmv '* *' '#1_#2'; do :; done while mmv '* *' '#1_#2'; do :; done while mmv '*\?*' '#1_#2'; do :; done while mmv '*\**' '#1_#2'; do :; done HTH, -dnh [1] bin mir grad nicht sicher, mit welchen Flags ich das kompiliert habe, vermutlich schon "generisch", aber evtl. doch mit Athlon-spezifischen Flags. -- +-------------------------------------------------------------------+ |-- SELF-ASSEMBLY MOEBIUS-STRIP - SEE OTHER SIDE FOR INSTRUCTIONS --| +-------------------------------------------------------------------+ -- 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
Hallo, David Haller schrieb:
Lieben Dank für die Mühe. Das wird mir so jedoch etwas zu kompliziert.
Wieso? Fändest du die Option in fdupes doof? Oder was? Für ne 10.2 und (IIRC[1]) Athlon Prozessor hätte ich dir sogar ein binary-RPM. Ggfs. ist aber ein "generisches" 10.2 / i586 RPM ruckzuck (1 min!) kompiliert. Nur halt zum weiterverbreiten und andere Distris is das nich so toll. Wobei auf RPM-basierten ein simples 'rpmbuild --rebuild' reichen sollte.
Nein, ich find das nicht doof! Ich würde mich freuen, wenn fdupes etwas weiterentwickelt würde. Ich habe mich bislang nicht so mit dem Selbstkompilieren beschäftigt. Fertige RPM's zu installieren ist natürlich easy.
Da fdupes mit |xargs rm gut arbeitet, brauche ich wirklich nur vorab die Dateien mit Leerzeichen im Dateinamen umbenennen.
Und die mit Tabs. Und die mit Zeilenumbrüchen. Und die mit Fragezeichen. Und die mit Sternchen.
In meinem speziellen Fall habe ich solche Dateinamen nicht.
while mmv '* *' '#1_#2'; do :; done while mmv '* *' '#1_#2'; do :; done while mmv '* *' '#1_#2'; do :; done while mmv '*\?*' '#1_#2'; do :; done while mmv '*\**' '#1_#2'; do :; done
Das ist ja genial! Ich wusste nicht, dass es für multiple move diesen Befehl gibt. Muss mich wohl doch einmal mehr mit der Konsole beschäftigen. :-) Viele Sachen lassen sich mit wenigen geschickten Befehlen oder einem kleinen Script bewältigen. Heute mache ich schon einiges unter Linux, bei dem ich früher unter Windows immer extra Progrämmchen brauchte. Leider schlummert ein Teil der Möglichkeiten irgendwie im Verborgenen und die Konsole ist für viele Anwender ein Graus oder das sprichwörtliche "Buch mit sieben Siegeln". Ich werd mir dann mal ein gutes Buch (bash-scripting oder so) kaufen... Online gibts ja bestimmt auch einige Hilfen. Für eine gute Empfehlung wäre ich dankbar. TIA Schöne Grüße Mathias Klose -- 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
Hallo, Am Mon, 29 Sep 2008, Mathias Klose schrieb:
David Haller schrieb:
Lieben Dank für die Mühe. Das wird mir so jedoch etwas zu kompliziert.
Wieso? Fändest du die Option in fdupes doof? Oder was? Für ne 10.2 und (IIRC[1]) Athlon Prozessor hätte ich dir sogar ein binary-RPM. Ggfs. ist aber ein "generisches" 10.2 / i586 RPM ruckzuck (1 min!) kompiliert. Nur halt zum weiterverbreiten und andere Distris is das nich so toll. Wobei auf RPM-basierten ein simples 'rpmbuild
Nein, ich find das nicht doof! Ich würde mich freuen, wenn fdupes etwas weiterentwickelt würde.
Mal gucken ;)
Ich habe mich bislang nicht so mit dem Selbstkompilieren beschäftigt. Fertige RPM's zu installieren ist natürlich easy.
Da fdupes mit |xargs rm gut arbeitet, brauche ich wirklich nur vorab die Dateien mit Leerzeichen im Dateinamen umbenennen.
Und die mit Tabs. Und die mit Zeilenumbrüchen. Und die mit Fragezeichen. Und die mit Sternchen.
In meinem speziellen Fall habe ich solche Dateinamen nicht.
while mmv '* *' '#1_#2'; do :; done while mmv '* *' '#1_#2'; do :; done while mmv '* *' '#1_#2'; do :; done while mmv '*\?*' '#1_#2'; do :; done while mmv '*\**' '#1_#2'; do :; done
Das ist ja genial!
Ich wusste nicht, dass es für multiple move diesen Befehl gibt.
Muss mich wohl doch einmal mehr mit der Konsole beschäftigen. :-)
Mit ner Schleife (über die Dateinamen) und tr/sed kann man auch alle Zeichen auf einmal ersetzen, aber da muß man die Kollisionsbehandlung selber machen, wenn man das sauber machen will wird's schnell aufwendig. Daher nehme ich gern mmv in ner Schleife, damit mehrere Vorkommen in einer Datei umbenannt werden ;)
Viele Sachen lassen sich mit wenigen geschickten Befehlen oder einem kleinen Script bewältigen. Heute mache ich schon einiges unter Linux, bei dem ich früher unter Windows immer extra Progrämmchen brauchte.
ACK.
Leider schlummert ein Teil der Möglichkeiten irgendwie im Verborgenen und die Konsole ist für viele Anwender ein Graus oder das sprichwörtliche "Buch mit sieben Siegeln".
Ich werd mir dann mal ein gutes Buch (bash-scripting oder so) kaufen... Online gibts ja bestimmt auch einige Hilfen. Für eine gute Empfehlung wäre ich dankbar.
http://www.selflinux.org/selflinux/html/shellprogrammierung.html http://www.selflinux.org/selflinux/html/regex.html In der FAQ gibt's auch Buchtips. HTH, -dnh -- Es ist heutzutage nicht einfach, eine komplette Desktop-Umgebung zu finden, die so schlank wie Emacs ist. -- Florian Diesch -- 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
Hallo, Am Donnerstag, 25. September 2008 22:44 schrieb Mathias Klose:
Nun suche ich irgendein Tool, um dieses Umbenennen rekursiv in allen Unterverzeichnissen automatisch ablaufen zu lassen.
Nimm krename. Ist absolut DAU-sicher und kann auch mit großen Datenmengen gut umgehen. -- Michael Herrmann -- 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
Hallo, Michael Herrmann schrieb:
Nimm krename. Ist absolut DAU-sicher und kann auch mit großen Datenmengen gut umgehen.
Danke für den Tip. Ich habe mein Vorhaben mit krename erfolgreich umsetzen können. Mit großen Datenmengen kann krename IMO nicht so gut umgehen. Es dauert fürchterlich lange. Für ca. 9.000 Dateien sind mehr als 10 Minuten drauf gegangen. Eine Aktion mit ca. 30.000 Dateien dauert schon seit gestern Abend an... Vielleicht liegt es ja an der Art und Größe der einzelnen Dateien. Krename bringt auch merkwürdige Fehlermeldungen. Nach fertigem Job (suchen/ersetzen und umbenennen) werden Fehler bei den Dateien angezeigt, die gar keine Leerzeichen enthielten und nicht umbenannt wurden. Naja vielleicht ist es auch nur eine Warnung. Letztlich ist es doch ein gutes Tool um eine gewisse Menge an Dateien in einem Rutsch zu bearbeiten. Schöne Grüße Mathias Klose -- 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
participants (6)
-
Andre Tann
-
Christian Brabandt
-
David Haller
-
Mathias Klose
-
Mathias Klose
-
Michael Herrmann