inotifywait (ส่วนหนึ่งของinotify-tools ) เป็นเครื่องมือที่เหมาะสมในการบรรลุวัตถุประสงค์ของคุณไม่สำคัญว่าจะมีการสร้างไฟล์หลายไฟล์พร้อมกันก็จะตรวจจับได้
นี่คือตัวอย่างสคริปต์:
#!/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จะใช้ตัวเลือกเหล่านี้
- mเพื่อตรวจสอบ dir ไปเรื่อย ๆ หากคุณไม่ได้ใช้ตัวเลือกนี้เมื่อตรวจพบไฟล์ใหม่แล้วสคริปต์จะสิ้นสุด
-rจะตรวจสอบไฟล์ซ้ำ ๆ (หากมีไฟล์จำนวนมาก / ไฟล์อาจใช้เวลาสักครู่ในการตรวจสอบไฟล์ที่สร้างขึ้นใหม่)
- สร้างเป็นตัวเลือกในการระบุเหตุการณ์ที่จะตรวจสอบและในกรณีของคุณมันควรจะสร้างเพื่อดูแลเกี่ยวกับไฟล์ใหม่
- รูปแบบ '% w% f'จะพิมพ์ไฟล์ในรูปแบบ /complete/path/file.name
"$ {MONITORDIR}"เป็นตัวแปรที่มีเส้นทางที่จะตรวจสอบว่าเราได้กำหนดไว้ก่อนหน้านี้
ดังนั้นในกรณีที่ไฟล์ใหม่จะถูกสร้างขึ้นinotifywait จะตรวจสอบได้และจะพิมพ์เอาท์พุท (/complete/path/file.name) ไปยังท่อและในขณะที่จะกำหนดผลลัพธ์ที่จะ newfile
ในขณะที่ลูปคุณจะเห็นวิธีการส่งเมลไปยังที่อยู่ของคุณโดยใช้ยูทิลิตี้ mailxที่ควรทำงานได้ดีกับ MTA ท้องถิ่นของคุณ (ในกรณีของคุณ Postfix)
หากคุณต้องการตรวจสอบหลายไดเรกทอรี inotifywait ไม่อนุญาต แต่คุณมีสองตัวเลือกให้สร้างสคริปต์สำหรับทุก dir เพื่อตรวจสอบหรือสร้างฟังก์ชันภายในสคริปต์สิ่งนี้:
#!/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" &