2011-10-30 15 views
9

मैं inotifywait उपयोग करने के लिए मेरी ~/js निर्देशिका के अंतर्गत सभी .js फाइलों को देखने के लिए कोशिश कर रहा हूँ को बाहर; मैं अपने आदेश को निम्न आदेश के अंदर कैसे प्रारूपित करूं?inotifywait - regex पैटर्न स्वरूपण

$ inotifywait -m -r --exclude [REGEX HERE] ~/js

regex - आदमी पृष्ठ के अनुसार, POSIX की होनी चाहिए नियमित अभिव्यक्ति बढ़ाया - "उन है कि .js में समाप्त होता है को छोड़कर सभी फ़ाइलें" से मेल खाना चाहिए, इसलिए इन फ़ाइलों में कर सकते हैं --exclude विकल्प से बाहर रखा जाना चाहिए।

मैंने (?!) लुकराऊ चीज़ की कोशिश की है, लेकिन ऐसा लगता है कि यह इस मामले में काम नहीं करता है। कोई विचार या कामकाज? इस मुद्दे पर आपकी मदद की बहुत सराहना करेंगे।

+2

आपको '-r' या' --exclude' का उपयोग करने की आवश्यकता नहीं है। बस चलाएं: 'inotifywait -m ~/js/*। Js' – ostrokach

उत्तर

6

मैं (?!) बात

यह बात नकारात्मक अग्रदर्शी कहा जाता है और यह POSIX ERE द्वारा समर्थित नहीं है की कोशिश की है।

तो आपको इसे कठिन तरीके से करना है, यानी आप जो कुछ भी बाहर करना चाहते हैं उससे मेल खाते हैं।

उदा।

\.(txt|xml) आदि

+1

क्या यह [^] मेटाचर का उपयोग करके करना संभव है? मैंने कोशिश की। *? [^ \।] [^ जे] [^ एस] $ ....... या तो इरादे के रूप में काम नहीं करता है। – gsklee

+1

नहीं आप नहीं कर सकते। और यह इरादे के रूप में काम करता है। – FailedDev

3

मैं एक पैच है कि यहाँ --include और --includei विकल्पों --exclude की negations की तरह काम करते हैं और कहते हैं --excludei पोस्ट:

https://github.com/browndav/inotify-tools/commit/160bc09c7b8e78493e55fc9f071d0c5575496429

जाहिर है आप 'inotifytools पुनर्निर्माण करना है, और यह अपेक्षाकृत untested है, लेकिन उम्मीद है कि यह इसे मुख्य लाइन में बना सकता है या बाद में इस पोस्ट में आने वाले किसी के लिए सहायक है।

+0

मैंने रेगेक्स पैच को थोड़ा सा अपडेट किया है और इसे अल्पाइन लिनक्स में इनोटिफी-टूल्स-इंक के रूप में जोड़ा है http://git.alpinelinux.org/cgit/aports/commit/?id=7ee2363baf3fda4d5e66ae285a658b73d1fdd281 –

1

सुनिश्चित करें कि आप रेगेक्स कमांड को उद्धृत कर रहे हैं, यदि आप शैल-प्रासंगिक वर्णों का उपयोग कर रहे हैं (() सहित)।

इस जबकि काम कर रहा है:

inotifywait --exclude \.pyc . 

यह नहीं है:

inotifywait --exclude '.*(\.pyc|~)' . 
7

inotifywait कोई विकल्प नहीं है और POSIX शामिल है:

inotifywait --exclude (\.pyc|~) . 

आप पूरे नियमित अभिव्यक्ति उद्धृत करने के लिए है विस्तारित नियमित अभिव्यक्ति अस्वीकृति का समर्थन नहीं करते हैं। (FailedDev द्वारा उत्तर दिया गया)

आप --include विकल्प प्राप्त करने के लिए इनोटिफ़ी टूल को पैच कर सकते हैं। लेकिन आपको इसे स्वयं संकलित और बनाए रखने की आवश्यकता है। (browndav द्वारा उत्तर दिया गया)

एक त्वरित कामकाज grep का उपयोग कर रहा है।

$ inotifywait -m -r ~/js | grep '\.js$' 

लेकिन अगर आप अन्य आदेशों पर आउटपुट पाइप करते हैं तो grep के बफरिंग से अवगत रहें।while read के साथ काम करने के लिए --line-buffered जोड़ें।

$ inotifywait -m -r ~/js | grep '\.js$' --line-buffered | 
    while read path events file; do 
     echo "$events happened to $file in $path" 
    done 

तुम सिर्फ पहले से ही विद्यमान फ़ाइलों में देखना चाहते हैं, तो आप भी find का उपयोग फ़ाइलों की सूची उत्पन्न करने के लिए कर सकते हैं: यहाँ एक उदाहरण है। यह नव निर्मित फाइलों को नहीं देखेगा।

$ find ~/js -name '*.js' | xargs inotifywait -m 

अपने सभी फाइलों को एक निर्देशिका में हैं, तो आप भी ostrokach के सुझाव का उपयोग कर सकते हैं। उस मामले में खोल विस्तार खोज और xargs से कहीं अधिक आसान है। लेकिन फिर, यह नई बनाई गई फाइलों को नहीं देखेगा।

$ inotifywait -m ~/js/*.js 
1

आप फ़ाइलों पर ध्यान न दें जब तक कि वे फ़ाइल नाम या पथ में कुछ बिंदु पर .js शामिल --exclude '\.[^j][^s]' के साथ इस का सबसे मिल सकता है। यदि आप इसे -r के साथ संयोजित करते हैं तो यह घोंसले के मनमाना स्तरों के साथ काम करेगा।

केवल दोष है test.js.old जैसे फ़ाइल नाम अभी भी देखे जाएंगे और example.js/ नामक निर्देशिका के अंदर सभी फाइलें भी देखी जाएंगी, लेकिन शायद यह कुछ हद तक असंभव है।

आप शायद इसे ठीक करने के लिए इस रेगेक्स का विस्तार कर सकते हैं लेकिन व्यक्तिगत रूप से मुझे नहीं लगता कि दोषों के बारे में चिंता करने के लिए पर्याप्त सौदे हैं।

संबंधित मुद्दे