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 इन विकल्पों का उपयोग करेगा।
-निर्दिष्ट रूप से डीआईआर की निगरानी करने के लिए, यदि आप इस विकल्प का उपयोग नहीं करते हैं, तो एक बार यह एक नई फ़ाइल का पता लगाने के बाद स्क्रिप्ट समाप्त हो जाएगी।
-r फ़ाइलों की पुनरावर्ती निगरानी करेगा (यदि बहुत सारी डायर / फाइलें हैं तो नई बनाई गई फाइलों का पता लगाने में कुछ समय लग सकता है)
-e बनाने नजर रखने के लिए और अपने मामले में यह किया जाना चाहिए घटना निर्दिष्ट करने का विकल्प है बनाने नई फ़ाइलों के बारे में देखभाल करने के लिए
--फॉर्म '% w% f' फ़ाइल को फॉर्मेट / अपूर्ण / path/file.name में प्रिंट करेगा
"$ {MONITORDIR}" वह चर है जिसकी निगरानी करने के लिए हम पहले परिभाषित कर चुके हैं।
इसलिए इस घटना में कि एक नई फ़ाइल बनाई जाती है, inotifywait इसका पता लगाएगा और आउटपुट (/complete/path/file.name) को पाइप में प्रिंट कर देगा और उस आउटपुट को वेरिएबल न्यूमेरिक को असाइन कर देगा ।
लूप के अंदर आपको अपने पते पर मेल भेजने का एक तरीका दिखाई देगा जिसमें मेलएक्स उपयोगिता का उपयोग करना चाहिए जो आपके स्थानीय एमटीए (आपके मामले में, पोस्टफिक्स) के साथ ठीक काम करना चाहिए।
यदि आप कई निर्देशिकाओं की निगरानी करना चाहते हैं, तो 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" &