inotifywait (một phần của công cụ inotify ) là công cụ phù hợp để thực hiện mục tiêu của bạn, không quan trọng rằng một số tệp đang được tạo cùng một lúc, nó sẽ phát hiện ra chúng.
Đây là một kịch bản mẫu:
#!/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 sẽ sử dụng các tùy chọn này.
-m để theo dõi thư mục vô thời hạn, nếu bạn không sử dụng tùy chọn này, một khi nó đã phát hiện ra một tệp mới, tập lệnh sẽ kết thúc.
-r sẽ giám sát các tệp đệ quy (nếu có nhiều thư mục / tệp thì có thể mất một lúc để phát hiện các tệp mới được tạo)
-e tạo là tùy chọn chỉ định sự kiện cần theo dõi và trong trường hợp của bạn, nó nên được tạo để quan tâm đến các tệp mới
--format '% w% f' sẽ in ra tệp theo định dạng /complete/path/file.name
"$ {MONITORDIR}" là biến chứa đường dẫn cần theo dõi mà chúng ta đã xác định trước đó.
Vì vậy, trong trường hợp một tệp mới được tạo, inotifywait sẽ phát hiện ra nó và sẽ in đầu ra (/complete/path/file.name) cho đường ống và trong khi đó sẽ gán đầu ra đó cho biến NEWFILE .
Trong vòng lặp while, bạn sẽ thấy một cách để gửi thư đến địa chỉ của bạn bằng tiện ích mailx sẽ hoạt động tốt với MTA cục bộ của bạn (trong trường hợp của bạn, Postfix).
Nếu bạn muốn theo dõi một số thư mục, inotifywait không cho phép nhưng bạn có hai tùy chọn, tạo tập lệnh cho mọi thư mục để theo dõi hoặc tạo chức năng bên trong tập lệnh, đại loại như sau:
#!/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" &