Estou usando o GNU find
.
Simplifiquei meu problema para esta sessão de shell:
$ mkdir t
$ cd t
$ touch a
$ ln -s a b
$ find -type l
./b
$ find -type l -o -type f
./a
./b
$ find -type l -print
./b
$ find -type l -o -type f -print
./a
Talvez seja o fato de eu estar com muito sono, mas 2 coisas não fazem sentido para mim:
- Não é
true OR false == true
? Como é que a adição-o -type f
causafind
a interrupção da correspondência./b
, apesar-type l
da correspondência? - A página de manual diz que essa
-print
é a expressão padrão, então como é que um arquivo é impresso quando não é mencionado, mas omitido quando é?
Isso também acontece quando uso -printf
(o que eu realmente preciso); Imagino que outras expressões também sejam afetadas.
Responder1
Em
find -type l -o -type f -print
você especificou uma ação, portanto o padrão não se aplica mais. Mas -printf
aqui é obrigatório -type f
porque “e” tem uma precedência maior que “ou”; você pode pensar nisso como equivalente a
find \( -type l \) -o \( -type f -print \)
Para processar links e arquivos da mesma maneira, você precisa agrupar os testes:
find \( -type l -o -type f \) -print