Antworten:
Grundsätzlich können Sie das renameTool 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 _fullTeil durch _500alle JPG-Dateien im aktuellen Verzeichnis.
rename 's/_full/_500/' *.jpg
Verwenden Sie dazu rekursiv ausgehend von Ihrem aktuellen Verzeichnis renamemit 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 -nOption hinzu rename(z. B. zwischen renameund der 's//'Zeichenfolge).
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;.
findgegen 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 zmvsich irgendwo in Ihrer .zshrcDatei 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 zshcontribManpage:
zmv [ -finqQsvwW ] [ -C | -L | -M | -p program ] [ -o optstring ] srcpat destVerschieben 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.lisinfoo.txt,my.old.stuff.lisummy.old.stuff.txtund 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?