Mit Exec können wir entweder alle Argumente gleichzeitig mit {} +oder einzeln übergeben{} \;
Nehmen wir jetzt an, ich möchte alle JPEGs umbenennen , kein Problem dabei:
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \;
Wenn ich jedoch eine Ausgabe umleiten muss, kann ich nach der Umleitung '{}'nicht darauf zugreifen.
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \;
Das würde nicht funktionieren. Ich müsste eine for-Schleife verwenden und die Ausgabe von find in einer Variablen speichern, bevor ich sie verwenden kann. Lassen Sie es uns zugeben, es ist umständlich.
for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do cjpeg -quality 80 $f > optimized_$f; done;
Gibt es einen besseren Weg?
{}die in längeren Zeichenfolgen angezeigt werden, da solche Zeichenfolgen normalerweise nicht erweitert werden.
findeinmal starten und auf den findBefehl selbst anwenden . Das {}hat in diesem Zusammenhang keine besondere Bedeutung. Die Umleitung ist kein Argument dafür findund sicherlich nicht Teil der -execKlausel.
>in der dritten Codebeispiel fehlt?