Incluso cuando /tmp
no se ha llamado ningún archivo something
, al buscarlo find
se devolverá 0:
$ find /tmp -name something
$ echo $?
0
¿Cómo puedo obtener un estado de salida distinto de cero cuando find
no encuentro nada?
Aquí hay una frase que creo que hace lo que quieres:
find /tmp -name something | egrep '.*'
El estado de retorno será 0
cuando se encuentre algo y, de lo contrario, no será cero.
Si también necesita capturar la salida de find
para un procesamiento posterior, la respuesta de Sven lo ha cubierto.
*
de laegrep
expresión regular es completamente redundante. Puesto que no se está utilizandoegrep
la sintaxis de expresiones regulares, el viejo y simplegrep
puede haber algunos microsegundos más rápido.find ... | read
La solución más simple que no imprime, pero sale 0 cuando se encuentran resultados
fuente
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:
fuente
find
no parece depender de los códigos de salida de ninguno de los-exec
s que ejecutó.exec
sección, no bajo el valor de retorno). No puede diferenciar entre nada encontrado y encontrarse con errores (por ejemplo, cuando se invocó en un punto de partida inexistente).Después de encontrar esta pregunta mientras trataba de encontrar la manera de resolver un problema con Puppet (cambiar los permisos en las carpetas de un directorio pero no en el directorio en sí), esto parece funcionar:
Mi caso de uso específico es este:
Que saldrá del código 1 si el comando find no encuentra archivos con los permisos requeridos.
fuente
No es posible. Find devuelve 0 si sale con éxito, incluso si no encontró un archivo (que es un resultado correcto que no indica un error cuando el archivo no existe).
Para citar la página de búsqueda
Dependiendo de lo que desee lograr, podría intentar dejar encontrar
-print
el nombre de archivo y probarlo con su salida:fuente
exec
/execdir
(usado con+
):If any invocation returns a non-zero value as exit status, then find returns a non-zero exit status.
Siento que este es el método más conciso y directo:
fuente
-print -quit
, lo que podría abordar su preocupación.Aquí hay un pequeño guión que llamé
test.py
. Mejora con respecto a otros métodos publicados, ya que devolverá un código de error si se establece uno, y además establece uno si find no enumera ningún archivo:Aquí está la salida de la línea de comandos:
Luego, para un resultado donde find tenía errores pero encontró archivos:
Luego, si desea la lista de archivos, puede hacer uso de
-print 0
pasarfind
y dividir la variable en nulos, o simplemente puede agregarle una declaración de impresión.fuente
No es solo
find
que devuelve los códigos de estado de salida como cero cuando tiene éxito. En unix, cualquiera que sea el comando que ejecute, si tiene éxito, devuelve el estado de salida como cero.fuente