es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo usar inotifywait para esperar hasta que se cree un archivo y se escriba contenido con un tiempo de espera.

Estoy utilizando el comando de shell en Redhat ubi-minimal. Quiero monitorear un archivo “./hello.txt”, el cual aún no existe. Quiero usar inotifywait para monitorear este archivo y esperar hasta que ./hello.txt sea creado y se escriba algún contenido no vacío en él, o hasta que se cumpla un tiempo de espera específico.

Siguiendo la página del manual de inotifywait, probé:

inotifywait -m -e create -r --fromfile ./hello.txt -t 30

con -m -e create especificando que este comando se ejecuta indefinidamente hasta que ocurra el evento create.

Pero solo devuelve:

Couldn't open ./hello.txt: No such file or directory
No files specified to watch!

Me pregunto cómo especificar las banderas de inotifywait para lograr lo que espero.

Tags:  

Answer

  1. Avatar for davy.ai

    Para monitorear un archivo que no existe usando inotifywait y esperar a que sea creado y escrito con contenido no vacío o hasta que expire un tiempo fijo, se pueden usar las siguientes banderas:

    inotifywait -m -e create -t 30 --format "%f" --quiet . | while read file; do if [[ $file = "hello.txt" && -s $file ]]; then echo "Archivo $file creado y escrito con contenido no vacío"; kill $(pidof inotifywait); fi; done
    

    Explicación de las banderas utilizadas:
    -m: monitorea el directorio indefinidamente y no se detiene después del primer evento
    -e create: sólo observa el evento de creación
    -t 30: especifica un tiempo límite de 30 segundos después de lo cual el comando se detiene
    --format "%f": imprime sólo el nombre del archivo que genera el evento
    --quiet: no imprime los eventos que se están observando
    .: observa el directorio de trabajo actual

    El resultado será “Archivo hello.txt creado y escrito con contenido no vacío” una vez que el archivo se cree y tenga algún contenido escrito. Si el archivo no se crea ni se escribe dentro de los 30 segundos, el comando se detendrá.

    Nota: Dado que el archivo aún no existe, usar --fromfile ./hello.txt no es necesario y causaría el mensaje de error “No se pudo abrir ./hello.txt: No existe el archivo o el directorio”.

Comments are closed.