Oh, eu acho que já trabalhei por conta própria ...
No primeiro caso, o -print
é executado somente quando a primeira condição ( -path '*fo*'
) não é verdadeira devido ao comportamento de curto-circuito de -o
.
No entanto, no segundo caso, o -print
implícito é feito quando a expressão todo é verdadeira - esse será o caso quando -path '*fo*'
for verdadeiro ou -type f
é verdadeiro. Em outras palavras, os dois comandos da minha pergunta são equivalentes a:
$ find . \( -path '*fo*' -prune \) -o \( -type f -print \)
./bar/xzyzzy
... e:
$ find . \( -path '*fo*' -prune -o -type f \) -print
./foo
./bar/xzyzzy
Eu acho que, de qualquer maneira:)