Im Allgemeinen werden rename
die Dateinamen gemäß der als erstes Argument des Befehls angegebenen Regel umbenannt. Die Dateinamen werden von den Argumenten geliefert, die auf das erste folgen.
Das erste Argument im Beispielbefehl ( rename 's/\.htm/\.html/' *.htm
) enthält Pelzteile, wobei in diesem Fall /
ein Trennzeichen für diese Teile ist:
s/regexp/replacement/[flags]
Der s
Befehl bedeutet Ersatz : s/<old>/<new>/
. Passen Sie den regulären Ausdruck an den Inhalt des Musterbereichs an. Wenn gefunden, ersetzen Sie die übereinstimmende Zeichenfolge durch Ersetzen.
Regulärer Ausdruck, der mit den Zeichenfolgen übereinstimmt, die ersetzt werden sollen. Im aktuellen Fall ist dies nur die Zeichenfolge .htm
.
In den meisten regulären Ausdrücken .
stimmt der Punkt mit jedem Zeichen überein. In diesem Fall möchten wir den Punkt wörtlich verwenden, daher müssen wir seiner speziellen Bedeutung durch Verwendung des Schrägstrichs \
(unter Angabe eines einzelnen Zeichens) entgehen .
Ersatz des Stichs / Regexp auf 2 abgestimmt.
Flag, das im aktuellen Beispiel nicht dargestellt wird. Es könnte zum Beispiel das Flag sein g
- wenden Sie den Ersatz auf alle Übereinstimmungen auf den regulären Ausdruck an, nicht nur auf den ersten. Nehmen wir an, wir haben eine Datei mit dem Namen my.htm-file.htm
:
Der ursprüngliche Befehl rename 's/\.htm/\.html/' *.htm
benennt die Datei folgendermaßen um : . Schauen Sie sich am Ende der Antwort an, wie Sie dieses Problem vermeiden können.my.html-file.htm
Durch Hinzufügen des g
Flags - rename 's/\.htm/\.html/g' *.htm
- lautet der neue Dateiname : .my.html-file.html
Entsprechend den Dateinamen: *
kann eine beliebige Anzahl von Zeichen darstellen (einschließlich null, dh null oder mehr Zeichen). Die Shell erweitert diesen Glob und übergibt die übereinstimmenden Dateinamen als separate Argumente an rename
So *.htm
- stimmt mit allen Dateinamen im aktuellen Pfad überein, die mit der Zeichenfolge enden .htm
. Wenn Sie zum Beispiel haben 1.htm
, 2.htm
, 3.htm
, 4.htm
, und 5.htm
dann rename 's/\.htm/\.html/' *.htm
passiert genau die gleichen Argumente wie ausgeführt umbenennen:
rename 's/\.htm/\.html/' 1.htm 2.htm 3.htm 4.htm 5.htm
Der gesamte Befehl ( rename 's/\.htm/\.html/' *.htm
) könnte folgendermaßen gelesen werden:
rename `<substitute>/<the string ".htm">/<with the string ".html">/` <do it for all files in the current path that end with ".htm">
Kehren wir zum Beispiel zurück, wenn wir eine Datei mit dem Namen haben my.htm-file.htm
. Wahrscheinlich möchten wir den letzten Teil des Dateinamens, die sogenannte Erweiterung, nach dem letzten Punkt ändern. Zu diesem Zweck sollten wir den rename
Befehl folgendermaßen ändern :
rename 's/\.htm$/\.html/' *.htm
Wo das $
Zeichen mit dem Ende der Zeile übereinstimmt und wörtlich "rückwärts lesen" bedeutet.
^
- Entspricht der Nullzeichenfolge am Anfang des Musterraums, dh was nach dem Zirkumflex erscheint, muss am Anfang des Musterraums erscheinen. ( lesen Sie mehr )
^
fungiert nur am Anfang des regulären Ausdrucks oder Unterausdrucks (dh nach \(
oder \|
) als Sonderzeichen . Tragbare Skripte sollten jedoch ^
zu Beginn eines Unterausdrucks vermieden werden, da POSIX Implementierungen zulässt, die ^
in diesem Kontext als normales Zeichen behandelt werden .
$
- Es ist dasselbe wie ^
, bezieht sich jedoch auf das Ende des Musterraums. $
fungiert auch nur am Ende des regulären Ausdrucks oder Unterausdrucks (dh vor \)
oder \|
) als Sonderzeichen , und seine Verwendung am Ende eines Unterausdrucks ist nicht portierbar.
Verweise: