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 find
commande elle-même. Le {}
n'a pas de signification particulière dans ce contexte. La redirection n'est pas un argument find
et ne fait certainement pas partie de la -exec
clause.
>
manquant dans le troisième exemple de code?