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.
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: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 actualEl 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”.