Saltar al contenido

Detecte continuamente nuevos archivos con inotify-tools dentro de múltiples directorios recursivamente

Puede que se de el caso de que encuentres algún problema con tu código o trabajo, recuerda probar siempre en un entorno de testing antes aplicar el código al trabajo final.

Solución:

notificaresperar (parte de inotify-tools) es la herramienta adecuada para lograr su objetivo, no importa que se estén creando varios archivos al mismo tiempo, los detectará.

Aquí un guión de muestra:

#!/bin/sh
MONITORDIR="/path/to/the/dir/to/monitor/"
inotifywait -m -r -e create --format '%w%f' "$MONITORDIR" | while read NEWFILE
do
        echo "This is the body of your mail" | mailx -s "File $NEWFILE has been created" "[email protected]"
done

notificaresperar utilizará estas opciones.

-metro para monitorear el directorio indefinidamente, si no usa esta opción, una vez que haya detectado un nuevo archivo, el script finalizará.

-r monitoreará los archivos de forma recursiva (si hay muchos directorios/archivos, podría llevar un tiempo detectar los nuevos archivos creados)

-e crear es la opción para especificar el evento a monitorear y en su caso debería ser crear cuidar los archivos nuevos

–formato ‘%w%f’ imprimirá el archivo en el formato /completo/ruta/archivo.nombre

“$MONITORDIR” es la variable que contiene la ruta a monitor que hemos definido anteriormente.

Entonces, en el caso de que se cree un nuevo archivo, inotifywait lo detectará e imprimirá la salida (/completar/ruta/archivo.nombre) a la pipa y mientras asigne esa salida a la variable NEWFILE.

Dentro del bucle while verás una forma de enviar un correo a tu dirección usando el utilidad mailx eso debería funcionar bien con su MTA local (en su caso, Postfix).

Si desea monitorear varios directorios, inotifywait no lo permite, pero tiene dos opciones, crear un script para cada directorio a monitorear o crear una función dentro del script, algo como esto:

#!/bin/sh
MONITORDIR1="/path/to/the/dir/to/monitor1/"
MONITORDIR2="/path/to/the/dir/to/monitor2/"
MONITORDIRX="/path/to/the/dir/to/monitorx/"    

monitor()  mailx -s "File $NEWFILE has been created" "[email protected]"
done

monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &

Utilice inotifywait, por ejemplo:

inotifywait -m /path -e create -e moved_to |
    while read path action file; do
        echo "The file '$file' appeared in directory '$path' via '$action'"
        # do something with the file
    done

Para más información y ejemplos ver el artículo
Cómo usar inotify-tools para activar scripts en eventos del sistema de archivos.

Te mostramos las reseñas y valoraciones de los usuarios

Al final de la artículo puedes encontrar las interpretaciones de otros desarrolladores, tú todavía puedes insertar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *