notifywait (bagian dari inotify-tools) adalah alat yang tepat untuk mencapai tujuan Anda, tidak masalah bahwa beberapa file sedang dibuat pada saat yang sama, alat ini akan mendeteksinya.
Berikut contoh skrip:
#!/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
notifywait akan menggunakan opsi ini.
-m untuk memantau dir tanpa batas, jika Anda tidak menggunakan opsi ini, setelah mendeteksi file baru, skrip akan berakhir.
-r akan memantau file secara rekursif (jika ada banyak dir/file, perlu beberapa saat untuk mendeteksi file yang baru dibuat)
-e buat adalah opsi untuk menentukan peristiwa yang akan dipantau dan dalam kasus Anda seharusnya buat untuk mengurus file baru
--format '%w%f' akan mencetak file dalam format /complete/path/file.name
"${MONITORDIR}" adalah variabel yang berisi jalur ke monitor yang telah kita tentukan sebelumnya.
Jadi jika file baru dibuat, inotifywait akan mendeteksinya dan akan mencetak hasilnya (/complete/path/file.name) ke pipa dan whileakan menetapkan keluaran itu ke variabel NEWFILE .
Di dalam while loop Anda akan melihat cara mengirim email ke alamat Anda menggunakan utilitas mailx yang seharusnya berfungsi baik dengan localMTA Anda (dalam kasus Anda, Postfix).
Jika Anda ingin memantau beberapa direktori, inotifywait tidak mengizinkannya tetapi Anda memiliki dua opsi, buat skrip untuk setiap direktori untuk dipantau atau buat fungsi di dalam skrip, 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" "[email protected]"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &
Gunakan inotifywait, misalnya:
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
Untuk informasi lebih lanjut dan contoh lihat artikel
Cara menggunakan alat inotify untuk memicu skrip pada peristiwa sistem file.