如何定期检查是否有任何文件更改然后构建

时间:2013-08-20 10:25:12

标签: bash shell if-statement while-loop

我想监视目录是否有变化,如果该目录中的任何文件发生变化,那么我想构建软件。我怎么能用shell“oneliner”来做呢?

我正在尝试一些

的变体

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

但语法不正确。

2 个答案:

答案 0 :(得分:1)

正如其他人建议的那样,使用inotifywait(来自Ubuntu上的inotify-tools包):

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

答案 1 :(得分:0)

好的,我最终做的是

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

交换文件出现问题,因为每次用vim打开文件时,构建都会触发,我希望它只在文件更改后触发。

还有一个问题:是否有人知道我是否可以指定正则表达式来匹配我想要触发事件的文件?例如。 *.cpp