Hallo ihr, wie kann ich folgendes Problem lösen: Ich möchte Dateinamen verändern und zwar folgendermaßen: Gehen wir davon aus, dass ich ein verzeichnis habe (/home/mucklpu/music/herbert_groenemeyer/...), in diesem Verzeichnis finden sich Dateien wie "Herbert Grönemeyer - Mensch (1).mp3", welche doofe Sonder - und Leerzeichen enthalten. Ich will also diese Dateien nicht einzeln umbenennen, sondern mit einem Befehl folgendes machen: aus dem Dateinamen "Herbert Grönemeyer - Mensch (1).mp3" soll entfernt werden: -alle Leer- und Sonderzeichen, wie (), ', ", etc. -alle zahlen -[-] soll durch [_] ersetzt werden Jetzt die Frage, geht das über einen Befehl oder muss ich das einzeln machen (es handelt sich um ca. 1200 Dateien)? Vielen Dank für eure Hilfe und sorry, dass ich wegen der 8.1 Installation so rumgepöbelt habe, ich war nur sehr genervt :-( Lars
On Mon, 14 Oct 2002 l@suse.de wrote:
Hallo ihr, wie kann ich folgendes Problem lösen: Ich möchte Dateinamen verändern und zwar folgendermaßen: Gehen wir davon aus, dass ich ein verzeichnis habe (/home/mucklpu/music/herbert_groenemeyer/...), in diesem Verzeichnis finden sich Dateien wie "Herbert Grönemeyer - Mensch (1).mp3", welche doofe Sonder - und Leerzeichen enthalten. Ich will also diese Dateien nicht einzeln umbenennen, sondern mit einem Befehl folgendes machen: aus dem Dateinamen "Herbert Grönemeyer - Mensch (1).mp3" soll entfernt werden: -alle Leer- und Sonderzeichen, wie (), ', ", etc. -alle zahlen -[-] soll durch [_] ersetzt werden
Jetzt die Frage, geht das über einen Befehl oder muss ich das einzeln machen (es handelt sich um ca. 1200 Dateien)?
Anahme: es sind nur Dateien, keine Directories: <eine Zeile> find /home/mucklpu/music/herbert_groenemeyer -type f -exec perl -e '($f=$_)=~s/[^\w]//g;rename $_,$f;' schmeisst - aber auch weg, wenn das bleiben soll wirds etwas schwieriger. Achim
On Die, 15 Okt 2002 at 21:12 (+0200), Achim Hoffmann wrote:
On Mon, 14 Oct 2002 l@suse.de wrote: ^^^^^^^^^ Du hast aber gemeine Eltern ;-)
Hallo ihr, wie kann ich folgendes Problem lösen: Ich möchte Dateinamen verändern und zwar folgendermaßen: [...] -alle Leer- und Sonderzeichen, wie (), ', ", etc. -alle zahlen -[-] soll durch [_] ersetzt werden
Jetzt die Frage, geht das über einen Befehl oder muss ich das einzeln machen (es handelt sich um ca. 1200 Dateien)?
Anahme: es sind nur Dateien, keine Directories:
<eine Zeile> find /home/mucklpu/music/herbert_groenemeyer -type f -exec perl -e '($f=$_)=~s/[^\w]//g;rename $_,$f;'
schmeisst - aber auch weg, wenn das bleiben soll wirds etwas schwieriger.
Hi Achim ;-) <Pingel-Modus on> jan@k500:~/tmp> > "Herbert Grönemeyer - Mensch (1).mp3" jan@k500:~/tmp> ls Herbert Grönemeyer - Mensch (1).mp3 jan@k500:~/tmp> find . -type f -exec perl -e \ '($f=$_)=~s/[^\w]//g;rename $_,$f;' find: missing argument to `-exec' <Pingel-Modus off> Dem find fehlt zumindest ein \; am Ende (Abschluss des Kommandos), außerdem wird IMHO $_ im Perl-Kommando nicht gefüttert (woher auch). Und zu guter Letzt werden auch die / im Pfad weggeschmissen, was mit Sicherheit nicht beabsichtigt ist. Das Ergebnis der Ersetzung kann man sich hier anschauen: find . -type f -exec perl -e \ '$f="'{}'";($n=$f)=~s/[^\w]//g;print $f," ",$n,"\n";' \; Stören könnte, dass alle Zeichen außer a-z und A-Z gelöscht werden - also auch der Punkt vor der Endung. Dann doch lieber etwas ausführlicher: find . -type f -exec perl -e \ '$d="'{}'";($_=$d)=~s/^[^\/]*\/(.*)\.mp3$/$1/;s/-/_/g;s/[^\w]//g; ($n=$d)=~s/^(.*\/)[^\/]*/$1/;rename $d,$n.$_.".mp3";' \; Das Ergebnis würde mich allerdings auch noch nicht zufrieden stellen, weil Umlaute ebenfalls gelöscht werden, ich würde da lieber ae, oe usw. haben wollen. Jan
On Die, 15 Okt 2002 at 23:24 (+0200), Jan Trippler wrote: [...] ich rede mal mit mir selber - macht eh am meisten Spaß, ich streite mich so selten mit mir ;-) Folgende Variante täte mich zufrieden stellen (das wurde mir in der Kommandozeile zu unübersichtlich, deshalb als separates Script): <Script ren.pl> #! /usr/bin/perl -w # ren.pl # Jan.Trippler@t-online.de 2002-10-16 use strict; use File::Basename; defined $ARGV[0] or die "usage: ren.pl file\n"; -f $ARGV[0] or die "file $ARGV[0] doesn't exist\n"; my %rep = ("Ä" => "Ae", "Ö" => "Oe", "Ü" => "Ue", "ä" => "ae", "ö" => "oe", "ü" => "ue", "ß" => "ss", "-" => "_" ); (my $sf = $ARGV[0]) =~ s/.*\.([^\.]*)/.$1/; my $fn = File::Basename::basename $ARGV[0], $sf; my $dn = File::Basename::dirname $ARGV[0]; foreach my $r (keys %rep) { $fn =~ s/$r/$rep{$r}/g; } $fn =~ s/[^\w]//g; rename $ARGV[0], $dn . "/" . $fn . $sf; Das Script führt für _eine_ Datei, die als 1. Argument auf der Kommandozeile übergeben werden muss die gewünschten Ersetzungen durch (es lässt sich also auch außerhalb des beschriebenen Problems betreiben). Der Hash %rep kann problemlos um weitere Ersetzungen ergänzt werden. Zum Füttern: find /pfad/zum/mp3-verzeichnis -type f -exec ren.pl "{}" \; Eine Einschränkung bleibt bestehen: Ich habe nicht getestet, wie auf Dateinamen mit Zeilenumbruch reagiert wird. Ich bin aber nach wie vor der Meinung, dass sowas pervers ist *g*, da AFAIK nur die wenigsten Kommandos damit umgehen können. Die beschriebene Vorgehensweise, das Perl-Script für jede Datei erneut aufzurufen, ist nicht sehr ressourcenschonend. Besser wäre es, das Durchsuchen des Verzeichnisbaums gleich mit in das Script zu integrieren - dazu ist es mir jetzt aber zu spät - äh früh ;-) Jan
On Tue, 15 Oct 2002, Jan Trippler wrote:
On Die, 15 Okt 2002 at 21:12 (+0200), Achim Hoffmann wrote:
On Mon, 14 Oct 2002 l@suse.de wrote: ^^^^^^^^^ Du hast aber gemeine Eltern ;-)
Hallo ihr, wie kann ich folgendes Problem lösen: Ich möchte Dateinamen verändern und zwar folgendermaßen: [...] -alle Leer- und Sonderzeichen, wie (), ', ", etc. -alle zahlen -[-] soll durch [_] ersetzt werden
Jetzt die Frage, geht das über einen Befehl oder muss ich das einzeln machen (es handelt sich um ca. 1200 Dateien)?
Anahme: es sind nur Dateien, keine Directories:
<eine Zeile> find /home/mucklpu/music/herbert_groenemeyer -type f -exec perl -e '($f=$_)=~s/[^\w]//g;rename $_,$f;'
schmeisst - aber auch weg, wenn das bleiben soll wirds etwas schwieriger.
Hi Achim ;-)
<Pingel-Modus on> jan@k500:~/tmp> > "Herbert Grönemeyer - Mensch (1).mp3" jan@k500:~/tmp> ls Herbert Grönemeyer - Mensch (1).mp3 jan@k500:~/tmp> find . -type f -exec perl -e \ '($f=$_)=~s/[^\w]//g;rename $_,$f;' find: missing argument to `-exec' <Pingel-Modus off>
LOL ja, ja, "just out of my finger tips", also {} \; am Ende fehlte. Und das mit dem Punkt habe ich uebersehen. Sorry. Ich glaube ich bastle mir jetzt ein .signature-for_suse-linux@suse.com : 1) Vorschlag kann beliebig verbessert werden 2) keine Garantie dass es auf *deinem* System wirklich funktioniert 3) KISS - keep it small and simple 4) echo denn sie wissen nicht was sie tun|sed 's/$/ (oder was passiert)/' fehlt noch was :-)) Ciao Achim
Hallo, On Wed, 16 Oct 2002, Achim Hoffmann wrote: [*patsch*@Achim: du willst deine Vorredner bitte zitieren!] [oehm, ich weiss nich mehr wer schrieb:]
wie kann ich folgendes Problem lösen: Ich möchte Dateinamen verändern und zwar folgendermaßen: [...] -alle Leer- und Sonderzeichen, wie (), ', ", etc. -alle zahlen -[-] soll durch [_] ersetzt werden
Jetzt die Frage, geht das über einen Befehl oder muss ich das einzeln machen (es handelt sich um ca. 1200 Dateien)?
Aehem, nur so nebenbei: Hatten wir das nicht erst neulich? Grab mal mit google im suse-linux-Archiv nach 'Trippler' und 'Haller' und 'tr' oder so... [..]
1) Vorschlag kann beliebig verbessert werden 2) keine Garantie dass es auf *deinem* System wirklich funktioniert 3) KISS - keep it small and simple
*PATSCH* "Keep It Simple, Stupid!"[1] [wer Akronym-Expandierungen faelscht oder gefaelschte Akronym-Expandierungen in Umlauf bringt wird mit *PATSCH* nicht unter Staerke 7 bestraft]
4) echo denn sie wissen nicht was sie tun|sed 's/$/ (oder was passiert)/'
Ebend. s.o. *PATSCH*[2]
fehlt noch was :-))
s.o. -dn'*scnr*'h [1] s.a. http://www.tuxedo.org/~esr/jargon/html/entry/KISS-Principle.html [2] ich hab mich grad halt so eingepatscht *g* -- 45: IRQ Internet Relay Quak (Peter Berlich)
3) KISS - keep it small and simple
*PATSCH*
"Keep It Simple, Stupid!"[1]
[wer Akronym-Expandierungen faelscht oder gefaelschte Akronym-Expandierungen in Umlauf bringt wird mit *PATSCH* nicht unter Staerke 7 bestraft]
[1] s.a. http://www.tuxedo.org/~esr/jargon/html/entry/KISS-Principle.html
http://www.acronymfinder.com/af-query.asp?Acronym=kiss auch reingePATSCHt ;-)
On Fre, 18 Okt 2002 at 11:19 (+0200), Achim Hoffmann wrote:
3) KISS - keep it small and simple
*PATSCH*
"Keep It Simple, Stupid!"[1]
[wer Akronym-Expandierungen faelscht oder gefaelschte Akronym-Expandierungen in Umlauf bringt wird mit *PATSCH* nicht unter Staerke 7 bestraft]
[1] s.a. http://www.tuxedo.org/~esr/jargon/html/entry/KISS-Principle.html
http://www.acronymfinder.com/af-query.asp?Acronym=kiss
auch reingePATSCHt ;-)
Wieso? Die Seite listet 13 Bedeutungen auf, wenn ich Platz 1 und Fettdruck richtig interpretiere, dann ist Davids Version die am meisten relevante - und Deine Version taucht überhaupt nicht auf :-) Jan
Am Montag, 14. Oktober 2002 23:39 schrieb lars@strojny.net:
Jetzt die Frage, geht das über einen Befehl oder muss ich das einzeln machen (es handelt sich um ca. 1200 Dateien)?
http://krename.sf.net ist genau dafür gemacht ! Auf den Punkt genau :-) Im Downloadmenü findest Du schon die Version 2.4.0 (STABLE), die noch nicht offiziell announced ist. Wenn Du die Möglichkeit hättest ein RPM für SuSE 8.1 zu erstellen, würde ich mich sehr freuen ! cu stonki -- deutsche ProFTPD Dokumentation: http://www.proftpd.de http://krename.sf.net http://kbarcode.sf.net
participants (5)
-
Achim Hoffmann
-
David Haller
-
Jan.Trippler@t-online.de
-
l@suse.de
-
Stefan Onken