当文件改变时执行某些操作

当文件改变时执行某些操作

当我编写 LaTeX 文档时,我发现自己经常在编辑器中按 F6 进行编译。或者当我使用 SASS 时,我经常键入make将我的转换.scss.css

现在我想让机器做一些脏活,并且make在每次给定的文件发生变化时运行或做其他事情。

到目前为止,我一直打开终端窗口并按下向上箭头和返回键。或者我使用watch make,但这似乎是一个奇怪的解决方案。

当给定文件发生变化时,Linux 上是否有一个好的方法可以执行某些操作?

答案1

您正在寻找的inotifywaitinotify 工具。项目网站上有一些如何使用它的示例,但一个简单的方法是,

while true; do inotifywait code.cpp -e modify; make; done

其中关键的是,

inotifywait code.cpp -e modify

该命令将等待,直到code.cpp被修改然后退出。将其置于无限循环中并随后make使其在每次修改后不断重建。

除了等待修改之外,您还可以等待创建、删除、访问、打开、关闭等。我强烈建议您查看项目实例inotifywait 手册页了解有关如何使用它的一些其他想法。

答案2

看一下因克龙,一个类似 cron 的软件包,它响应文件系统事件,而不是时间事件。该软件包由一个守护进程 ( incrond) 和一个表操作器 ( incrontab) 组成,类似于众所周知的cron crond/对。crontab

make使用 incron,您可以轻松安排在修改特定文件和/或目录时运行。

答案3

而不是watch make,怎么样watch ls?那么就make在时间戳改变的时候。

相关内容