inotifywait (bagian dari inotify-tools ) adalah alat yang tepat untuk mencapai tujuan Anda, tidak masalah bahwa beberapa file sedang dibuat pada saat yang sama, itu akan mendeteksi mereka.
Berikut skrip contoh:
#!/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 akan menggunakan opsi ini.
-m untuk memantau dir tanpa batas, jika Anda tidak menggunakan opsi ini, setelah ia mendeteksi file baru, skrip akan berakhir.
-r akan memonitor file secara rekursif (jika ada banyak direktori / file, mungkin perlu beberapa saat untuk mendeteksi file yang baru dibuat)
-e create adalah opsi untuk menentukan acara yang akan dipantau dan dalam kasus Anda harus dibuat untuk menjaga file baru
--format '% w% f' akan mencetak file dalam format /complete/path/file.name
"$ {MONITORDIR}" adalah variabel yang berisi path untuk memonitor yang telah kita tentukan sebelumnya.
Jadi dalam hal file baru dibuat, inotifywait akan mendeteksi dan akan mencetak output (/complete/path/file.name) ke pipa dan sementara akan menetapkan output itu ke variabel NEWFILE .
Di dalam loop sementara Anda akan melihat cara untuk mengirim email ke alamat Anda menggunakan utilitas mailx yang akan berfungsi dengan baik dengan MTA lokal Anda (dalam kasus Anda, Postfix).
Jika Anda ingin memantau beberapa direktori, inotifywait tidak mengizinkannya tetapi Anda memiliki dua opsi, buat skrip untuk setiap dir untuk memantau atau membuat fungsi di dalam skrip, kira-kira seperti ini:
#!/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" &