GNU/Linux >> Belajar Linux >  >> Linux

Terus mendeteksi file baru dengan alat inotify dalam banyak direktori secara rekursif

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.


Linux
  1. Bagaimana Cara Menghapus Direktori Secara Rekursif Dengan Wildcard?

  2. CloudCross – Menyinkronkan File dan Direktori dengan Beberapa Penyimpanan Cloud

  3. Mengunduh file dengan wget menggunakan banyak koneksi

  1. Temukan file dan direktori di Linux dengan perintah find

  2. Script Untuk Memantau Folder Untuk File Baru?

  3. Terus pantau log dengan ekor yang sesekali diputar

  1. Menggunakan Inotify Untuk Memantau Akses Ke File?

  2. Cara menyalin file ke banyak direktori menggunakan perintah gnu cp

  3. Linux menemukan nama file dengan string yang diberikan secara rekursif