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