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.