GNU/Linux >> Tutoriales Linux >  >> Linux

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

inotificaresperar (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 script 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

inotificaresperar utilizará estas opciones.

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

-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 para 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 (/completa/ruta/archivo.nombre) a la tubería y whilewill asignará esa salida a la variable NEWFILE .

Dentro del bucle while verás una forma de enviar un correo a tu dirección usando la 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 monitorear cada directorio 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() {
inotifywait -m -r -e create --format "%f" "$1" | while read NEWFILE
do
        echo "This is the body of your mail" | 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.


Linux
  1. CloudCross:sincronice archivos y directorios con múltiples almacenamientos en la nube

  2. Cómo copiar un archivo a varios directorios usando el comando gnu cp

  3. Linux encuentra nombres de archivo con una cadena dada recursivamente

  4. Descargar un archivo con wget usando múltiples conexiones

  5. texto de eco con nueva línea en bash

Cómo cambiar los permisos de archivos de forma recursiva con chmod en Linux

Cómo copiar un archivo a varios directorios en Linux

Copie un archivo a varios directorios desde la línea de comandos en Linux

Cómo crear nuevos usuarios en OpenShift con htpasswd y OAuth

Cómo copiar un archivo con un comando a varios directorios en Linux

Cómo copiar archivos con una extensión de archivo específica recursivamente