Ich habe einen Ordner mit einer Reihe von Dateien mit dem Namen:
prefix_1234_567.png
prefix_abcd_efg.png
Ich möchte einen Unterstrich und den mittleren Inhalt stapelweise entfernen, damit die Ausgabe wie folgt lautet :
prefix_567.png
prefix_efg.png
Relevant, aber nicht vollständig erklärend:
_*_
durch ein Leerzeichen zu ersetzen .Antworten:
In Ihrem speziellen Fall können Sie den folgenden
bash
Befehl verwenden (bash
ist die Standard-Shell unter macOS):Hinweis: Wenn die Möglichkeit besteht, dass Ihre Dateinamen beginnen
-
, platzieren Sie sie--
vor ihnen [1]:mv -- "$f" "${f/_*_/_}"
Hinweis:
echo
Wird vorangestelltmv
, um einen Trockenlauf durchzuführen. Entfernen Sie es, um das eigentliche Umbenennen durchzuführen.Sie können es über die Befehlszeile ausführen oder in einem Skript verwenden.
"${f/_*_/_}"
ist eine Anwendung derbash
Parametererweiterung : Das (erste) Teilstring-Übereinstimmungsmuster_*_
wird durch ein Literal ersetzt_
, wodurch das mittlere Token effektiv aus dem Namen herausgeschnitten wird._*_
ein Muster ist (ein Platzhalterausdruck, wie er auch zum Globbing verwendet wird), kein regulärer Ausdruck (um mehr über Muster zu erfahren, auszuführenman bash
und zu suchenPattern Matching
).Wenn Sie häufig Dateien im Batch umbenennen, sollten Sie ein spezielles Tool wie das Perl-basierte
rename
Dienstprogramm installieren . Unter macOS können Sie es mit dem beliebten Paketmanager Homebrew wie folgt installieren :Hier ist das Äquivalent des Befehls oben mit
rename
:Wieder führt dieser Befehl einen Trockenlauf durch; entfernen
-n
, um das eigentliche Umbenennen durchzuführen.bash
Lösungs/.../.../
eine Textersetzung durch, es werden jedoch - anders als inbash
- echte reguläre Ausdrücke verwendet.[1] Der Zweck eines speziellen Arguments
--
, das von den meisten Dienstprogrammen unterstützt wird, besteht darin, zu signalisieren, dass nachfolgende Argumente als Operanden (Werte) behandelt werden sollten , auch wenn sie von Anfang an wie Optionen aussehen , wie Jacob C. bemerkt.-
quelle
.*
->$1
), z. B. UmbenennenFoo bar S01E01 biz baz.ext
inS01E01.ext
:rename -n -e 's/.*(S[0-9]{2}E[0-9]{2}).*(\.[a-z]{2,4})/$1$2/' *
echo
für Trockenläufe zu verwenden. Danke für den Tipp!brew install rename
Um Dateien umzubenennen, können Sie das
rename
Dienstprogramm verwenden:brew install rename
So ändern Sie beispielsweise eine Suchzeichenfolge in allen Dateinamen im aktuellen Verzeichnis:
Entfernen Sie den Parameter 'n', um die Änderungen zu übernehmen.
Mehr Info:
man rename
quelle
OS X
Versionen vonGNU bash
( x86_64-apple-darwin ) enthalten das Dienstprogramm zum Umbenennen nicht.brew install rename
rename -vs GLYCOPHORIN GLYCC *
und jetzt werden automatisch mehr als 450 Dateien umbenannt. Und super schnell auch.Sie könnten sed verwenden:
Ergebnis:
* Um zuerst einen Trockenlauf durchzuführen, ersetzen Sie ihn
mv
am Ende durchecho
Erläuterung:
quelle
ls * | xargs -I % bash -c 'echo mv "%" "$(sed 's@_.*_@_@' <<<"%")"'
(Entfernenecho
, um es tatsächlich umzubenennen).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:
quelle
Sie können den
rename
Befehl mithilfe von installierenbrew
. machbrew install rename
es einfach und benutze es.quelle
Verwenden von
mmv
quelle
sudo apt-get install mmv
.brew install mmv
.Versuche dies
Hier ist ein anderer Weg:
quelle