Ich muss Folgendes umbenennen:
file_001_loremipsum.png
file_002_dolor.png
file_003_sit.png
file_004_amet.png
file_105_randomness.png
in
upl_loremipsum.png
upl_dolor.png
upl_sit.png
upl_amet.png
upl_randomness.png
Wie mache ich das mit nur einer einfachen Zeile des Terminalbefehls?
rename
regex
batch-rename
Unamata Sanatarai
quelle
quelle
Antworten:
Die Lösung für das obige Beispiel mit Umbenennen :
Verwendungszweck:
Von
man rename
:Umbenennen kann Regex als Argumente nehmen.
Was wir betrachten, ist der Inhalt zwischen den einzelnen Anführungszeichen
'
. Sie können Regex getrennt durch platzieren/
.Formel:
s/(1)/(2)/
wobei(1)
= Suchmuster und(2)
= Muster ersetzen.So vertraut youself mit regex und Muster basierte Batch - Datei umbenennen genießen!
quelle
rename
es sich leicht mit installierenbrew install rename
.--no-act
Flag--nono
stattdessen. Diese Antwort könnte auch etwas expliziter sein:[files]
verweist auf anfängliche Pattern-Matching-Dateien im aktuellen Verzeichnis, die möglicherweise umbenannt werden sollen (z. B.*
stimmt alles überein, aber nur im aktuellen Verzeichnis).rename
, der das Format hatrename from to file
und keine regulären Ausdrücke unterstützt. Eigentlich hat meine Linux-Distribution (Cent OS 7) genau diese Version.Wenn sich Dateien in mehreren Verzeichnissen befinden, benennen Sie sie nach einer Suche wie folgt um:
das -n nach dem umbenennen ist zu testen, entfernen um fortzufahren! -)
Auf diese Weise assoziieren Sie das Finden und Umbenennen von Macht.
Persönlich habe ich es verwendet, um den Quell-Header .h in .hpp umzubenennen
quelle
-iname
,-type
und-exec
Fahnen auf manpages.ubuntu.com/manpages/bionic/man1/find.1.html#expression . (find --help
Ist für diesen Befehl nicht besonders hilfreich.) TL; DR:-iname
Stimmt nicht mit der Groß- / Kleinschreibung eines Musters überein.-type f
stimmt mit "regulären Dateien" überein; und-exec
führt einen Ausdruck aus, bis er auf ein;
(Semikolon-) Zeichen trifft .Dies kann mit wenig Magie der Bash-Parameter-Erweiterung durchgeführt werden!
file_[0-9]*_*;
- Mit dem ersten Muster werden alle Dateien durchsucht, die mit 'file_anynumber_' beginnen.${f#file_[0-9]*_}
- Mit dem zweiten Musterfile_[0-9]*_
wird in der Parametererweiterung festgelegt, dass 'file_anynumber_' vom Beginn der Zeichenfolge entfernt werden soll.Weitere Informationen zu
Parameter expansion
:quelle
[0-9]*
eine Ziffer gefolgt von einer beliebigen Zeichenfolge. Es gibt wahrscheinlich einen besseren Weg, um nur Zahlen abzugleichen, aber ich kann mir nichts Prägnantes vorstellen.