La page find
man indique:
-execdir command {} +
renvoie toujours true, tandis-execdir command {} ;
renvoie true uniquement si la command renvoie 0.
et
EXIT STATUS trouve exit avec l'état 0 si tous les files sont traités avec succès, supérieur à 0 en cas d'erreur.
- Comment créer une queue délimitée pour les tâches shell?
- -not -name ne fonctionne pas avec find
- find des files en fonction du nom et les déplacer en les renommant simultanément
- Exclure le directory dans la command (native Solaris) find
- Espaces en tant que sauts de ligne de inline pour la command de boucle
Mais si je teste cela, j'ai le comportement inverse:
$ find . -execdir false '{}' \; ; echo $? 0 $ find . -execdir false '{}' \+ ; echo $? 1
Quelqu'un peut-il expliquer cela?
Avec -exec
au lieu de -execdir
j'obtiens les mêmes résultats. J'ai essayé de find (GNU findutils) 4.6.0
et 4.4.2
.
Ce "return" n'est pas le code de sortie de find
, mais la valeur de return de l'action -execdir
dans le but d'enstringr plusieurs actions de find
set. Si tu essayes:
find . -execdir false '{}' \; -print
alors -print
ne s'exécute jamais (c'est-à-dire qu'il n'y a pas de sortie), alors que les deux:
find . -execdir true '{}' \; -print find . -execdir false '{}' + -print
imprimer chaque path.
Cependant, en utilisant +
le code de sortie de find
est défini: il est différent de zéro si une invocation de la command sort non-nulle, alors que pour a ;
le code de sortie n'est pas affecté (directement) par les résultats de la command. Ce comportement est requirejs par POSIX pour -exec
, je suppose pour indiquer les échecs qui autrement seraient indétectables:
Si l'expression primaire est ponctuée par un
<plus-sign>
, le primaire doit toujours être considéré comme vrai et les paths pour lesquels le primaire est évalué doivent être agrégés en sets. […] Si un appel renvoie une valeur différente de zéro en tant qu'état de sortie, l'utilitaire de search doit renvoyer un état de sortie différent de zéro .
-exec ... \;
n'est pas spécifié comme affectant le code de sortie, donc le comportement par défaut de la sortie de zéro à less qu'une erreur ne s'applique. Un -exec ... \;
la command sortant de zéro n'est pas considérée comme une erreur, donc en l'absence d'une autre erreur, le code de sortie sera toujours zéro.