| rename -n s/\].*/\/g *.jpg
|
Zerlegen wir dieses Kommando mal in Token, dann haben wir 4:
rename: das Kommando/Programm
-n: ein Schalter
das Ersetzungsmuster
eine Menge an Files, die von der Shell aus dem Muster *.jpg gebildet wird, also etwa a.jpg, b.jpg, c.jpg.
Das Ersetzungsmuster:
Es besteht aus vier Teilen, die durch Slashes getrennt werden. Slashes sind damit Sonderzeichen und müssten, wollte man sie selbst als Zeichen verstehen, maskiert werden, aber Slashes sind keine erlaubten Zeichen in Dateinamensbezeichnern. Das macht die Sache einfach!
Wir haben also vier Teile:
s steht für "substitute", "ersetze".
Dann kommt das zu ersetzende Muster.
Dann kommt die Ersetzung
Das abschließende g besagt "global", d.h. wenn das Muster mehrfach gefunden wird, soll nicht nur das erste Auftauchen ersetzt werden (default), sondern jedes.
Das zu ersetzende Muster \].*
ist nicht sachgerecht formuliert. Ein Backslash maskiert das folgende Zeichen, d.h. es hebt seine Metafunktion auf. Eine schließende Backsteinklammer hat nur dann eine besondere Bedeutung, wenn eine öffnende vorrausging, zu der sie das Gegenstück sein kann. Ansonsten muss sie nicht maskiert werden.
].*
steht für eine schließende Backsteinklammer, gefolgt von einem beliebigen Zeichen (.), das beliebig häufig (*), auch 0 Mal, vorkommen kann.
Der Erstezungstoken ist nur ein Backslash, wie wir gelernt haben ein Maskierungszeichen. Er maskiert hier aber das Ende des Ersetzungstokens. Das ist nicht sachgerecht. Wenn man einen Ausdruck A durch Nichts ersetzen will, sprich löschen, lässt man den Ersetzungsausdruck weg.
Da die Backsteinklammer nur ein mal vorkommt ist das abschließende g überflüssig.
Richtig wäre also "s/].*//".
| rename -n "s/.*\[//;" blablabla\[test.jpg\].jpg
rename(blablabla[test.jpg].jpg, test.jpg].jpg)
|
Jetzt fehlt noch ein Ausdruck für alles bis zur öffnenden Backsteinklammer:
| rename -n "s/].*//" blablabla\[test.jpg\].jpg
rename(blablabla[test.jpg].jpg, blablabla[test.jpg)
|
"s/.*\[//" bedeutet also subtitute .*\[
, beliebige Zeichen bis zur Backsteinklammerauf einschließlich (diese muss maskiert werden, weil sonst nach einem Zeichen aus einer Zeichengruppe gesucht wird wie in [02468]
oder [A-Z]
).
Zwei Substitutionsbefehle verketten kann man mit ; - alternativ ist die Oder-Verknüpfung mit | möglich. Das Leerzeichen hinter dem Semikolon dient nur der leichteren Lesbarkeit, also kann auch weggelassen werden.
| rename -n "s/.*\[//; s/].*//" blablabla\[test.jpg\].jpg
rename(blablabla[test.jpg].jpg, test.jpg)
|