- soluciones desnudas -
Si desea findomitir los contenidos del directorio encontrado, pero continúa buscando en otros directorios, use -prunecomo 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:-quit4.2.3GNU findfind-quit
find . -type d -name somename -exec ... -quit
Para que esto funcione como se esperaba, uno tiene que asegurarse de que los -execretornos sean verdaderos (en otras palabras, un estado cero ). Si desea -execque se ignore el estado de salida de , para que eso -quitsiempre 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 findfunciona 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 -oopción cambia la unión a "OR".
Un elemento complicado -oes que findpuede "optimizar" su comando y no ejecutar la -execparte si escribe solo
find . -type d -name somename -exec ... -o -quit
Para hacer frente a eso, puede forzar finda evaluar todos los predicados con "O", encerrándolos entre paréntesis.