2011-11-11 29 views
0

在inotifywait手冊改變陳述Inotifywait對於大型目錄

-r,--recursive手錶作爲參數傳遞的任何目錄的所有子目錄下。手錶將遞歸設置爲無限深 。符號鏈接沒有被過濾。新創建的 子目錄也將被監視。

警告:如果您在觀看的 根目錄中的大樹下,使用此選項可能需要相當長一段時間,直到所有的inotify手錶 建立和事件不會在這個時候接收。 此外,由於每個子目錄將建立一個inotify手錶,因此可能會達到每個用戶手錶的最大數量 。默認最大值是8192;可通過寫入 /proc/sys/fs/inotify/max_user_watches來增加。

我認爲這意味着每次調用inotifywait時,大型目錄都會有延遲。因此,不斷地監測大型目錄具有監視功能,像這樣

inotifywait -m /home/user/Documents 

是不是通過像這樣的目錄(在手冊頁從一個例子)手動循環

while inotifywait /home/user/Documents; do 
#Do Something for each file change 
done 

爲每次迭代更有效while循環,你必須再次建立inotifywait。但有了第一個選擇,我不能根據回報執行。理想的情況是什麼,我要的是像這樣

inotifywait -m --callback ./callback.sh /home/user/Documents 

所以callback.sh一個回調函數的inotifywait返回值每次被調用。我將如何實現這一點?

回答

3

可以通過管道將它像:

inotifywait -m /my/directory | while read LINE; do ./do_something.sh $LINE; done 

請記住,你得到了某些操作的許多事件,其中的每一個將觸發啓動腳本的。

您也可以使用perl或其他語言直接使用API​​,這會給您帶來很大的靈活性。

+0

我從來沒有用過Perl。我注意到很多示例使用C,但我更喜歡儘可能使用shell。 – puk

+0

總是有機會使用命令的「-e」開關過濾事件,並且/或者讓do_something.sh grep相關參數的'$ LINE'。 –