- soluções simples -
Se você quiser que find pule o conteúdo do diretório encontrado, mas continue 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ê quiser que find pare de pesquisar e depois de encontrar o primeiro diretório correspondente, o que você está procurando é -quit (disponível desde a versão 4.2.3 de GNU find ). Este é um pouco mais complicado de usar, porque faz find sair imediatamente - então -quit deve ser colocado no final do comando:
find . -type d -name somename -exec ... -quit
Para que isso funcione como esperado, é necessário assegurar que -exec retorne verdadeiro (em outras palavras, um status zero ). Se você quiser que o status de saída de -exec seja ignorado, para que -quit sempre funcione, você precisa de 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 -
A coisa 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 ) será executada somente se a parte anterior inteira não retornar false . Por padrão, todos os testes são unidos com "AND" lógico, a opção -o altera a junção para "OR".
Um elemento complicado de -o é que find pode "otimizar" seu comando e não executar a parte -exec 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.