Nesta demonstração, usarei sh -c 'echo first; false'
(ou true
) para o primeiro -exec
. Isso dará alguma saída e também terá o efeito de código de saída selecionado. Então echo second
será usado para o segundo. Suponha que haja um arquivo no diretório atual.
$ find . -type f -exec sh -c 'echo first; false' \; -exec echo second \;
first
$ find . -type f -exec sh -c 'echo first; true' \; -exec echo second \;
first
second
$ find . -type f \( -exec sh -c 'echo first; false' \; -false -o -exec echo second \; \)
first
second
$ find . -type f \( -exec sh -c 'echo first; false' \; -false -o -exec echo second \; \)
first
second
Um comando real desse tipo seria parecido com:
find . -type f \( -exec command1 \; -false -o -exec command2 \; \)
No segundo conjunto, os parênteses com escape agrupam as duas cláusulas -exec
. O -false
entre eles força o estado de teste para "false" e o -o
faz com que a próxima expressão (o segundo -exec
) seja avaliada por causa do -false
.
De man find
:
expr1 expr2
Two expressions in a row are taken to be joined with an implied "and"; expr2 is not evaluated if expr1 is false.expr1 -a expr2
Same as expr1 expr2.expr1 -o expr2
Or; expr2 is not evaluated if expr1 is true.