- soluciones desnudas -
Si desea find
omitir los contenidos del directorio encontrado, pero continúa buscando en otros directorios, use -prune
como sugirió @laebshade. El comando completo debería verse así
find . -type d -name somename -prune -exec ...
Por otro lado, si desea dejar de buscarfind
por completo y después de encontrar el primer directorio coincidente, entonces lo que está buscando es (disponible desde la versión de ). Este es un poco más complicado de usar, ya que hace que la salida sea inmediata, por lo que debe colocarse al final del comando:-quit
4.2.3
GNU find
find
-quit
find . -type d -name somename -exec ... -quit
Para que esto funcione como se esperaba, uno tiene que asegurarse de que los -exec
retornos sean verdaderos (en otras palabras, un estado cero ). Si desea -exec
que se ignore el estado de salida de , para que eso -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 acerca de cómo find
funciona es que todas las acciones ("pruebas") se tratan como predicados 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ó falso . Por defecto, todas las pruebas se unen con "AND" lógico, la -o
opción cambia la unión a "OR".
Un elemento complicado -o
es que find
puede "optimizar" su comando y no ejecutar la -exec
parte si escribe solo
find . -type d -name somename -exec ... -o -quit
Para hacer frente a eso, puede forzar find
a evaluar todos los predicados con "O", encerrándolos entre paréntesis.