Exec nous permet de passer tous les arguments à la fois avec {} +ou de les passer un par un avec{} \;
Maintenant, disons que je veux renommer tous les fichiers jpeg , pas de problème en faisant ceci:
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \;
Mais si j'ai besoin de rediriger la sortie, '{}'n'est pas accessible après la redirection.
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \;
Ça ne marcherait pas. Je devrais utiliser une boucle for, stockant la sortie de find dans une variable avant de l'utiliser. Admettons-le, c'est lourd.
for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do cjpeg -quality 80 $f > optimized_$f; done;
Alors, y a-t-il une meilleure façon?
{}apparaît dans une chaîne plus longue car ces chaînes ne sont généralement pas développées.
find, une fois, et appliquée à la findcommande elle-même. Le {}n'a pas de signification particulière dans ce contexte. La redirection n'est pas un argument findet ne fait certainement pas partie de la -execclause.
>manquant dans le troisième exemple de code?