Incluso cuando /tmpno se ha llamado ningún archivo something, al buscarlo findse devolverá 0:
$ find /tmp -name something
$ echo $?
0
¿Cómo puedo obtener un estado de salida distinto de cero cuando findno encuentro nada?
Aquí hay una frase que creo que hace lo que quieres:
find /tmp -name something | egrep '.*'
El estado de retorno será 0cuando se encuentre algo y, de lo contrario, no será cero.
Si también necesita capturar la salida de findpara un procesamiento posterior, la respuesta de Sven lo ha cubierto.
*de laegrepexpresión regular es completamente redundante. Puesto que no se está utilizandoegrepla sintaxis de expresiones regulares, el viejo y simplegreppuede haber algunos microsegundos más rápido.find ... | readLa 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
findno parece depender de los códigos de salida de ninguno de los-execs que ejecutó.execsecció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
-printel 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 0pasarfindy dividir la variable en nulos, o simplemente puede agregarle una declaración de impresión.fuente
No es solo
findque 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