Ich möchte viele Dateien umbenennen wie
Tum Hi Ho [www.DJMaza.Com].mp3
ZuTum Hi Ho.mp3
Dazu habe ich diesen Befehl verwendet. Aber irgendwie funktioniert es nicht.
`rename -n 's/(.*)([.*])(\.mp3)/$1$3/' *.mp3`
Antwort1
Sie waren nah dran, aber nicht ganz:
rename -n 's/\[[^\]]+\]//' *.mp3
Das Problem ist, dass es []
sich um eine spezielle Regex-Konstruktion handelt und die Klammern daher maskiert werden müssen, wenn sie mit den tatsächlichen Klammern übereinstimmen sollen. Das ist der Zweck der Backslashes in meiner Version.
Die nicht maskierten Klammern bilden eine sogenannte Zeichenklasse. Eine Zeichenklasse kann grundsätzlich mit jedem Zeichen innerhalb der Klammern übereinstimmen. Dies trifft also auf einen Punkt oder ein Sternchen zu. Wenn Sie am Anfang einer Klasse [.*]
ein Zirkumflex ( ) hinzufügen , stimmt es mit jedem Zeichen überein.^
nichtinnerhalb der Klammern.
In meinem regulären Ausdruck gleichen wir eine öffnende Klammer \[
plus ein oder mehrere Zeichen ab, die keine schließende Klammer sind, [^\]]+
plus eine schließende Klammer \]
und entfernen das alles.