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.