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.
find
einmal starten und auf den find
Befehl selbst anwenden . Das {}
hat in diesem Zusammenhang keine besondere Bedeutung. Die Umleitung ist kein Argument dafür find
und sicherlich nicht Teil der -exec
Klausel.
>
in der dritten Codebeispiel fehlt?