- soluções simples -
Se você quiser find
pular o conteúdo do diretório encontrado, mas continuar pesquisando em outros diretórios, use -prune
como @laebshade sugerido. O comando completo deve se parecer com
find . -type d -name somename -prune -exec ...
Por outro lado, se você deseja interromperfind
completamente a pesquisa e depois de encontrar o primeiro diretório correspondente, o que você está procurando é -quit
(disponível desde a versão 4.2.3
do GNU find
). Este é um pouco mais complicado de usar, porque find
sai imediatamente - portanto -quit
deve ser colocado no final do comando:
find . -type d -name somename -exec ... -quit
Para que isso funcione conforme o esperado, é preciso garantir que os -exec
retornos sejam verdadeiros (em outras palavras, um status zero ). Se você deseja que o status de saída -exec
seja ignorado, para que -quit
sempre funcione, é necessário um pequeno truque:
find . -type d -name somename \( -exec ... -o -true \) -quit
ou
find . -type d -name somename \( -exec ... -o -quit \)
ou
find . -type d -name somename \( -exec ... , -quit \) # a comma before -quit
- alguma explicação -
O mais importante sobre como find
funciona é que todas as ações ("testes") são tratadas como predicados lógicos interpretados da esquerda para a direita. Portanto, a última ação (por exemplo -quit
) só será executada se a parte anterior inteira não retornar falsa . Por padrão, todos os testes são associados ao lógico "AND", a -o
opção altera a junção para "OR".
Um elemento complicado -o
é que você find
pode "otimizar" seu comando e não executar a -exec
parte se você digitar apenas
find . -type d -name somename -exec ... -o -quit
Para lidar com isso, você pode forçar find
a avaliar todos os predicados com "OR", colocando-os entre parênteses.