ich habe einen Ordner mit einer Reihe von Dateien mit dem Namen:
prefix_1234_567.png
prefix_abcd_efg.png
ich möchte stapelweise einen Unterstrich und den mittleren Inhalt entfernen, damit die Ausgabe erfolgt
prefix_567.png
prefix_efg.png
danke relevant, aber nicht vollständig erklärend: wie kann ich Dateien mit dem Terminal stapelweise umbenennen?Regex, um Dateien in OS X Terminal stapelweise umzubenennen
In Ihrem speziellen Fall können Sie den folgenden Befehl bash
verwenden (bash
ist die Standard-Shell unter macOS):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
Hinweis: Wenn die Wahrscheinlichkeit besteht, dass Ihre Dateinamen mit -
Beginnen, stellen Sie --
Davor [1]:mv -- "$f" "${f/_*_/_}"
Hinweis: echo
wird mv
vorangestellt, um einen Probelauf durchzuführen. Entfernen Sie es, um die eigentliche Umbenennung durchzuführen.
Sie können es über die Befehlszeile ausführen oder in einem Skript verwenden.
"${f/_*_/_}"
Ist eine Anwendung von bash
Parametererweiterung : Das (erste) Teilstring-Übereinstimmungsmuster _*_
Wird durch Literal _
Ersetzt. effektiv das mittlere Zeichen aus dem Namen schneiden._*_
Ein Muster (ein Platzhalterausdruck, wie er auch zum Verschieben verwendet wird) ist, nicht ein regulärer Ausdruck (um mehr über Muster zu erfahren , führen Sie man bash
aus und suchen Sie nach Pattern Matching
).Wenn Sie häufig Dateien stapelweise umbenennen, sollten Sie ein spezielles Tool wie das Perl-basierte Dienstprogramm rename
installieren. Unter macOS können Sie es mit dem gängigen Paketmanager Homebrew wie folgt installieren:
brew install rename
Hier ist das Äquivalent des Befehls oben mit rename
:
rename -n -e 's/_.*_/_/' *.png
Auch dieser Befehl führt einen Probelauf durch. Entfernen Sie -n
, um die tatsächliche Umbenennung durchzuführen.
bash
-Lösung führt s/.../.../
Eine Textsubstitution durch, jedoch werden - anders als in bash
- true reguläre Ausdrücke verwendet.[1] Das spezielle Argument --
, Das von den meisten Dienstprogrammen unterstützt wird, soll signalisieren, dass nachfolgende Argumente als Operanden (Werte) behandelt werden sollen, auch wenn sie = sind schau wie optionen aufgrund des Anfangs mit -
, wie Jacob C. notiert.
Um Dateien umzubenennen, können Sie das Dienstprogramm rename
verwenden:
brew install rename
So ändern Sie beispielsweise eine Suchzeichenfolge in allen Dateinamen im aktuellen Verzeichnis:
rename -nvs searchword replaceword *
Entfernen Sie den Parameter 'n', um die Änderungen zu übernehmen.
Mehr Info: man rename
Sie könnten sed verwenden:
ls * | sed -e 'p;[email protected]_.*[email protected][email protected]' | xargs -n2 mv
ergebnis:
prefix_567.png prefix_efg.png
* Um zuerst einen Probelauf durchzuführen, ersetzen Sie mv
am Ende durch echo
Erläuterung:
Ich hatte eine Reihe von Dateien, die so aussahen: be90-01.png und musste den Bindestrich in Unterstrich ändern. Ich habe das benutzt, was gut funktioniert hat:
for f in *; do mv "$f" "`echo $f | tr '-' '_'`"; done
sie können den Befehl rename
mithilfe von brew
installieren. mach einfach brew install rename
und benutze es.
mmv
verwenden
mmv '*_*_*' '#1_#3' *.png
versuche dies
for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; done
Hier ist ein anderer Weg:
for file in Name*.png; do mv "$file" "01_$file"; done