डिफ़ॉल्ट रूप से, inotifywait -e CREATE
से पाठ उत्पादन
watched_filename CREATE event_filename
जहां watched_filename
का प्रतिनिधित्व करता है /home/inventory/initcsv
और event_filename
नया फ़ाइल का नाम का प्रतिनिधित्व करता है फार्म की है।
तो, अपने while inotifywait -e ...
लाइन के स्थान पर, डाल:
DIR=/home/inventory/initcsv
while RES=$(inotifywait -e create $DIR); do
F=${RES#?*CREATE }
और Filein
नाम के रूप में अपने sed
लाइन उपयोग $F
में। नोट, $(...)
निर्माण प्रक्रिया प्रतिस्थापन (अक्सर बैकटिक्स का उपयोग करके किया जाता है) का पॉज़िक्स-संगत रूप है और ${RES#pattern}
परिणाम $RES
के बराबर है जो सबसे कम पैटर्न-मिलान उपसर्ग हटा दिया गया है। नोट, पैटर्न का अंतिम चरित्र एक खाली है।
अद्यतन 1 sed लाइन उपयोग $F
के बजाय "$F"
में फ़ाइल नाम है कि खाली स्थान के हो सकते हैं, को संभालने के लिए [अद्यतन 2 देखें]। यही है, F
के मान के संदर्भ में डबल कोट्स का उपयोग करें।
RES=...
और F=...
परिभाषाओं को डबल कोट्स का उपयोग करने की आवश्यकता नहीं है, लेकिन यदि आप चाहें तो उनका उपयोग करना ठीक है; उदाहरण के लिए: F=${RES#?*CREATE }
और F="${RES#?*CREATE }"
व्हाइटसाइट युक्त फ़ाइल नामों को संभालने पर दोनों ठीक काम करेंगे।
अद्यतन 2 के रूप में दान की इस टिप्पणी में बताया गया है, inotifywait
एक --format
पैरामीटर है कि इसके उत्पादन के रूप को नियंत्रित करता है।
Setting up watches.
Watches established.
RES is a at Tue Dec 31 11:37:20 MST 2013
Setting up watches.
Watches established.
RES is aaa at Tue Dec 31 11:37:21 MST 2013
Setting up watches.
Watches established.
RES is aaaa at Tue Dec 31 11:37:22 MST 2013
Setting up watches.
Watches established.
स्रोत
2011-09-24 23:25:04
क्यों न केवल '--format% w' विकल्प का उपयोग करके आउटपुट क्यों करें, इसलिए केवल फ़ाइल नाम का उपयोग किया जा सकता है? – Daan
@Daan, हाँ, यह समझ में आता है (% f के साथ,% w नहीं)। अद्यतन 2 –
'inotifywait -e delete_self aSymlinkFilename' अभ्यस्त काम अगर सिमलिंक हटा दी जाती है, केवल तभी जब इसकी वास्तविक फ़ाइल हटा दी जाती है :(देखें, यह टूटा हुआ सिमलिंक :( –