2013-08-20 28 views
0

我想監視目錄中是否有更改,如果該目錄中的任何文件發生更改,那麼我想構建軟件。我怎麼能用一個shell「oneliner」來做到這一點?如何定期檢查是否有任何文件發生了變化,然後構建

我嘗試的

watch "if [ find _source -mmin -1 ]; then make; fi"

一些變化,但它不是正確的語法。

+4

使用[inotifywait](http://linux.die.net/man/1/inotifywait)來監控您的目錄的活動 – user000001

+3

[this](http://superuser.com/a/181543)回答應該幫幫我。 – devnull

+1

但是不應該自動這樣做嗎? – Himanshu

回答

0

好了,所以我落得這樣做是

while inotifywait --exclude "\.(swp|~)" -qqre modify _source; do make ; done 

,其中一個問題,因爲每次我打開了交換文件一個vim的文件正在觸發,我希望它只在文件更改後觸發。

還有一個問題:有誰知道我是否可以指定正則表達式來匹配我想要觸發事件的文件?例如。 *.cpp

1

正如其他建議的,使用inotifywait(從inotify-tools包在Ubuntu):

while inotifywait -qqre modify,create,delete,move _source;do make;done 

問題與該方法是,在化妝過程的修改將不會被檢測到。 要解決這個問題,您可以運行兩個進程;第一個:

while inotifywait -qqre modify,create,delete,move _source;do touch trigger;done 

而另外一個:

while inotifywait -qqre create trigger 
do while [ -f trigger ] 
    do rm trigger; make 
    done 
done 
相關問題