Por que o GNU detecta a supressão dos diretórios de impressão -prune'd quando outro teste “-ou” é aplicado? [duplicado]

1
    

Esta pergunta já tem uma resposta aqui:

    

Eu tenho um diretório com os seguintes arquivos e um diretório .git , por exemplo

.
├── .git
│   ├── branches
│   ├── COMMIT_EDITMSG
│   ├── packed-refs
│   └── refs
├── readme.md
├── server_build.sh
└── tags

Se eu executar o comando GNU find com o -prune test, find imprimirá o diretório que é prune 'd:

% find . -name '.git' -prune
./.git

Se adicionar outra opção OU, o diretório que é removido não aparecer mais na saída:

% find . -name '.git' -prune -o -name '*.md' -print
./readme.md

Nesse caso, os testes -name '.git' e -name '*.md' devem estar retornando como true, não é possível que a adição de outro teste OR torne o teste -name '.git' -prune inseguro.
Há algum comutador implícito sendo adicionado à primeira instrução?
Em outras palavras, é encontrar girando

find . -name '.git' -prune

em

find . -name '.git' -prune -print

no tempo de execução? e o -print implícito é removido quando o próximo teste é adicionado?
Por que não find imprime o diretório -prune'd quando outro teste "-ou" é aplicado?

    
por the_velour_fog 19.07.2016 / 07:43

1 resposta

1

find . -name '.git' -prune

é o mesmo que

find . -name '.git' -prune -print

para remover e depois imprimir

find . -name '.git' -prune -o -name '*.md' -print

é o mesmo que

find . \( -name '.git' -prune -true \) -o \( -name '*.md' -print \)

então ele faz a primeira cláusula, se ele remover, então ele faz true (o prefixo retorna true), e não faz o lado direito de -o

Estes sempre serão impressos

find . \( -name '.git' -prune -o -name '*.md' \) -print
find . -name '.git' -prune -print -o -name '*.md' -print
    
por 19.07.2016 / 10:41

Tags