जब मुझे फ़ाइल परिवर्तनों का पता लगाने की आवश्यकता होती है और जो कुछ tail -f filename
करता है उसके अलावा कुछ और करता है, तो मैंने inotifywait
स्क्रिप्ट का उपयोग परिवर्तन का पता लगाने और उस पर कार्य करने के लिए किया है। उपयोग का एक उदाहरण नीचे दिखाया गया है। देखें man inotifywait
अन्य घटना नाम और स्विच के लिए। inotify-tools
उदाहरण के लिए, आपको पैकेज को स्थापित करने की आवश्यकता हो सकती है sudo apt-get install inotify-tools
।
यहाँ उदाहरण स्क्रिप्ट कहा जाता है exec-on-change
:
#!/bin/sh
# Detect when file named by param $1 changes.
# When it changes, do command specified by other params.
F=$1
shift
P="$*"
# Result of inotifywait is put in S so it doesn't echo
while S=$(inotifywait -eMODIFY $F 2>/dev/null)
do
# Remove printf if timestamps not wanted
printf "At %s: \n" "$(date)"
$P
done
दो कंसोल में मैंने निम्नानुसार कमांड दर्ज की (जहाँ A> का अर्थ कंसोल A में प्रविष्टि है, और B> का अर्थ कंसोल B में प्रविष्टि है)
A> rm t; touch t
B> ./exec-on-change t wc t
A> date >>t
A> date -R >>t
A> date -Ru >>t
A> cat t; rm t
cat t
कंसोल A में से निम्न आउटपुट दिखाई दिया:
Thu Aug 16 11:57:01 MDT 2012
Thu, 16 Aug 2012 11:57:04 -0600
Thu, 16 Aug 2012 17:57:07 +0000
exec-on-change
कंसोल बी में दिखाई देने वाले निम्न आउटपुट :
At Thu Aug 16 11:57:01 MDT 2012:
1 6 29 t
At Thu Aug 16 11:57:04 MDT 2012:
2 12 61 t
At Thu Aug 16 11:57:07 MDT 2012:
3 18 93 t
exec-on-change
स्क्रिप्ट समाप्त जब मैं rm
'घ t
।