¿Hay algún medio idiomático para detectar si "find" encontró alguna coincidencia? Actualmente estoy usando
COUNT=`find ... | wc -l`
if [ "$COUNT" -gt 0 ]; then
pero esto me parece un poco indirecto. Además, me gustaría que dejara de buscar una vez que haya encontrado una coincidencia, para que no pierda tiempo y esfuerzo. Solo necesito saber si hay archivos que coincidan o no.
Actualización: cometí el error de escribir mi pregunta sin el código que tenía delante: lo uso wc -len un caso diferente, donde necesito saber el número total de archivos encontrados de todos modos. En el caso donde solo estoy probando si hay coincidencias, estaba usando if [ -z $(find …) ].

-nsolo se aplicaba a variables 'definidas' ($ abc, $ xyz, etc.), pero supongo que $ (...) es una variable temporal 'definida' ... +1 ... (y simplemente lea recientemente que usar-nes arriesgado, a menos que esté seguro de que la variable aún no se ha declarado y está 'sin usar) ... pero una temperatura no tendrá esta posibilidad ... es decir. sin inicializar vs vacío-nprueba si una cadena está vacía, no tiene nada que ver con las variables. Lo que has leído probablemente decía que usar-nno prueba si una variable está definida:-n "$foo"es falsa sifooestá definida pero está vacía, y muestra un mensaje de error debajoset -u.[ -n "${foo+1}" ]prueba de manera confiable sifooestá configurado, pero tratar variables vacías y no configuradas de manera idéntica suele ser una buena idea[ -n "${foo:+1}" ], o simplemente[ -n "$foo" ]si no le preocupaset -u.-quitdisponible, pero la tuberíahead -n 1funciona (como lo hacehead -c 1, lo que se detiene incluso antes, pero probablemente con un beneficio insignificante). Además, cometí el error de escribir mi pregunta sin el código que tenía delante: lo usowc -len un caso diferente, donde necesito saber la cantidad total de archivos encontrados. En el caso donde solo estoy probando si hay coincidencias, estaba usandoif [ -z `find … ` ].Puedes usar la
-quitacción para detenerte después del primer partido. Probablemente desee combinar eso con otra acción (como-print) o no podrá saber si encontró algo.Por ejemplo,
find ... -print -quitimprimirá la ruta del primer archivo coincidente y luego saldrá. O bien, puede usar-printf 1 -quitpara imprimir 1 si hay una coincidencia y nada si no la hay.findEl estado de salida refleja si hubo errores durante la búsqueda y no si encontró algo, por lo que debe verificar su salida para ver si hay una coincidencia.fuente
-quites una extensión de GNU. No funcionará en sistemas que usan otras implementaciones de find (1), como OS X, los BSD y probablemente la mayoría de los Unices comerciales.La salida 0 es fácil con find, la salida> 0 es más difícil porque eso generalmente solo ocurre con un error. Sin embargo, podemos hacer que suceda:
Tenga en cuenta que esta solución es más eficaz que usar una subshell; ejecutar falso es ciertamente más rápido que ejecutar incluso Dash:
fuente
Puede envolverlo en la condición de shell, por ejemplo:
¿Dónde
...está su condición de partido, por ejemplo-name *.txt.Algunos otros ejemplos:
fuente