- soluções simples -
Se você quiser findpular o conteúdo do diretório encontrado, mas continuar pesquisando em outros diretórios, use -prunecomo @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.3do GNU find). Este é um pouco mais complicado de usar, porque findsai imediatamente - portanto -quitdeve ser colocado no final do comando:
find . -type d -name somename -exec ... -quit
Para que isso funcione conforme o esperado, é preciso garantir que os -execretornos sejam verdadeiros (em outras palavras, um status zero ). Se você deseja que o status de saída -execseja ignorado, para que -quitsempre 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 findfunciona é 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 -oopção altera a junção para "OR".
Um elemento complicado -oé que você findpode "otimizar" seu comando e não executar a -execparte se você digitar apenas
find . -type d -name somename -exec ... -o -quit
Para lidar com isso, você pode forçar finda avaliar todos os predicados com "OR", colocando-os entre parênteses.