Esse "retorno" não é o código de saída de find
, mas o valor de retorno da ação -execdir
para fins de encadeamento de várias ações find
juntas. Se você tentar:
find . -execdir false '{}' \; -print
então -print
nunca é executado (ou seja, não há saída), enquanto os dois:
find . -execdir true '{}' \; -print
find . -execdir false '{}' + -print
imprima todos os caminhos.
No entanto, ao usar +
, o código de saída de find
é definido: é diferente de zero se qualquer chamada do comando sair diferente de zero, enquanto que para ;
o código de saída não é afetado (diretamente) pelos resultados do comando. Este comportamento é exigido pelo POSIX para -exec
, eu suponho indicar falhas que de outra forma seriam indetectável:
If the primary expression is punctuated by a
<plus-sign>
, the primary shall always evaluate as true, and the pathnames for which the primary is evaluated shall be aggregated into sets. [...] If any invocation returns a non-zero value as exit status, the find utility shall return a non-zero exit status.
-exec ... \;
não está especificado como afetando o código de saída, portanto, o comportamento padrão de find
de sair de zero, a menos que tenha ocorrido um erro. Um comando -exec ... \;
saindo de um valor diferente de zero não é considerado um erro, portanto, na ausência de algum outro erro, o código de saída será sempre zero.