Antworten:
Grundsätzlich können Sie das rename
Tool dafür verwenden. Es sollte in einer Perl-basierten Version mit Debian-basierten Linux-Distributionen vorliegen, aber Sie können es auch einfach von der Quelle herunterladen (natürlich müssen Sie es zuerst mit ausführbar machen chmod +x
).
Der folgende Befehl ersetzt das _full
Teil durch _500
alle JPG-Dateien im aktuellen Verzeichnis.
rename 's/_full/_500/' *.jpg
Verwenden Sie dazu rekursiv ausgehend von Ihrem aktuellen Verzeichnis rename
mit find
.
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;
Hinweis: Möglicherweise möchten Sie den Befehl testen, bevor er tatsächlich ausgeführt wird. Fügen Sie dazu die -n
Option hinzu rename
(z. B. zwischen rename
und der 's//'
Zeichenfolge).
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;
.
find
gegen etwas austauschen , das Rohrleitungskonstrukte umfasst (und möglicherweise aufgrund von Leerzeichen in Dateinamen usw. fehlschlägt)? Ich habe festgestellt, dass Letzteres unsicher und bestenfalls schwer zu lesen ist.
Vielleicht möchten Sie in zmv schauen . zmv ist eine zsh-spezifische Funktion und muss autoload -U zmv
sich irgendwo in Ihrer .zshrc
Datei befinden.
EDIT: Als Beispiel könnte die Aufgabe, die das OP stellte, gelöst werden
noglob zmv '(*)_full.(*)' '$1_500.$2'
Ein Auszug aus der zshcontrib
Manpage:
zmv [ -finqQsvwW ] [ -C | -L | -M | -p program ] [ -o optstring ] srcpat dest
Verschieben Sie (normalerweise umbenennen) Dateien, die dem Muster srcpat entsprechen, in entsprechende Dateien mit Namen der von dest angegebenen Form, wobei srcpat Klammern um Muster enthält, die wiederum durch $ 1, $ 2, ... in dest ersetzt werden. Zum Beispiel,
zmv '(*).lis' '$1.txt'
benennt um
foo.lis
infoo.txt
,my.old.stuff.lis
ummy.old.stuff.txt
und so weiter.Das Muster wird immer als EXTENDED_GLOB-Muster behandelt. Jede Datei, deren Name durch die Ersetzung nicht geändert wird, wird einfach ignoriert. Jeder Fehler (eine Ersetzung führte zu einer leeren Zeichenfolge, zwei Ersetzungen ergaben das gleiche Ergebnis, das Ziel war eine vorhandene reguläre Datei und -f wurde nicht angegeben) führt dazu, dass die gesamte Funktion abgebrochen wird, ohne etwas zu tun.
EXTENDED_GLOB-Muster sind enorm leistungsfähig. Hier ist eine gute Einführung in das Konzept.
exec
?