inotifywait (parte di inotify-tools) è lo strumento giusto per raggiungere il tuo obiettivo, non importa se vengono creati più file contemporaneamente, li rileverà.
Ecco uno script di esempio:
#!/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
inotifywait utilizzerà queste opzioni.
-m per monitorare la directory a tempo indeterminato, se non si utilizza questa opzione, una volta rilevato un nuovo file lo script terminerà.
-r monitorerà i file in modo ricorsivo (se ci sono molte cartelle/file potrebbe volerci un po' per rilevare i nuovi file creati)
-e crea è l'opzione per specificare l'evento da monitorare e nel tuo caso dovrebbe essere create per occuparsi dei nuovi file
--format '%w%f' stamperà il file nel formato /completo/percorso/nome.file
"${MONITORDIR}" è la variabile contenente il percorso da monitorare che abbiamo definito in precedenza.
Quindi, nel caso in cui venga creato un nuovo file, inotifywait lo rileverà e stamperà l'output (/complete/path/file.name) alla pipe e while assegnerà quell'output alla variabile NEWFILE .
All'interno del ciclo while vedrai un modo per inviare una mail al tuo indirizzo utilizzando l'utility mailx dovrebbe funzionare bene con il tuo MTA locale (nel tuo caso, Postfix).
Se vuoi monitorare più directory, inotifywait non lo consente ma hai due opzioni, crea uno script per ogni directory da monitorare o crea una funzione all'interno dello script, qualcosa del genere:
#!/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" &
Usa inotifywait, ad esempio:
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
Per ulteriori informazioni ed esempi vedere l'articolo
Come utilizzare inotify-tools per attivare script sugli eventi del filesystem.