inotifywait (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" "yourmail@addresshere.tld"
done
inotifywait usará estas opciones.
-m para monitorear el directorio indefinidamente, si no usa esta opción, una vez que haya detectado un nuevo archivo, el script finalizará.
-r supervisará los archivos de forma recursiva (si hay muchos directorios / archivos, podría tomar un tiempo detectar los nuevos archivos creados)
-e create es la opción para especificar el evento a monitorear y en su caso debe crearse para cuidar los nuevos archivos
--format '% w% f' imprimirá el archivo en el formato /complete/path/file.name
"$ {MONITORDIR}" es la variable que contiene la ruta para monitorear que hemos definido antes.
Entonces, en el caso de que se cree un nuevo archivo, inotifywait lo detectará e imprimirá la salida (/complete/path/file.name) en la tubería y, al mismo tiempo, asignará esa salida a la variable NEWFILE .
Dentro del ciclo while verá una forma de enviar un correo a su dirección utilizando la utilidad mailx que 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 para 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() {
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" "yourmail@addresshere.tld"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &