¿Cómo detengo un hallazgo al descender a los directorys encontrados?

Estoy queriendo encontrar todos los directorys con una cadena específica para que pueda hacer otra búsqueda en los files contenidos dentro.

Así que no quiero perder el time en ./my-search-term/dir/my-search-term etc.

¿Cómo puedo dejar de recurrir cuando encuentre el primer directory my-search-term?

La acción- -prune hace que find no recurse en el directory. Puede combinarlo con otra acción como -exec (el order de -prune y -exec no importa, siempre que -prune se ejecute de cualquier manera).

 find . -name my-search-term -prune -exec find {} … \; 

Tenga en count que anidar find dentro de un find -exec puede ser un poco problemático: no puede usar -exec en el find interno, ya que el terminador sería visto como un terminador por el find externo. Puede solucionarlo invocando un shell, pero tenga cuidado con las comillas.

 find . -name my-search-term -prune -exec sh -c ' find "$0" … -exec … {} + ' {} \; 

– soluciones simples –

Si desea omitir los contenidos del directory encontrado, pero continúe buscando en otros directorys, use -prune como @laebshade. El command completo debería verse así

  find . -type d -name somename -prune -exec ... 

Por otro lado, si desea que la búsqueda deje de search por completo y después de encontrar el primer directory coincidente, entonces lo que está buscando es -quit (disponible desde la versión 4.2.3 de GNU find ). Este es un poco más complicado de usar, ya que hace que find salida de inmediato, por -quit debe colocarse -quit al final del command:

 find . -type d -name somename -exec ... -quit 

Para que esto funcione como se espera, se debe asegurar que el -exec devuelve verdadero (en otras palabras, un estado cero ). Si desea -exec estado de salida de -exec , de modo que -quit siempre funcione, necesita un pequeño truco:

 find . -type d -name somename \( -exec ... -o -true \) -quit 

o

 find . -type d -name somename \( -exec ... -o -quit \) 

o

 find . -type d -name somename \( -exec ... , -quit \) # a comma before -quit 

– alguna explicación –

Lo más importante sobre cómo funciona find es que todas las acciones ("testings") se tratan como pnetworkingicados lógicos interpretados de izquierda a derecha. Por lo tanto, la última acción (por ejemplo, -quit ) solo se realizará si toda la parte anterior no devolvió false . Por defecto, todas las testings se unen con "Y" lógico, la opción -o cambia la articulación a "O".

Un elemento complejo de -o es que find puede "optimizar" tu command y no ejecutar la parte -exec si -exec solo

 find . -type d -name somename -exec ... -o -quit 

Para hacer frente a eso, puede forzar a find para evaluar todos los pnetworkingicados joned con "O", encerrándolos entre paréntesis.