如何有效地监视一个目录在Linux上的变化?

我正在与Magento合作,并且有一个将CSS和Javascript合并成一个大文件的函数。

不pipe利弊如何,都存在以下问题:

最终文件被caching在多个级别,包括但不限于:

  • Amazon CloudFront
  • 代理服务器
  • 客户端浏览器caching

Magento使用连接的CSS文件名的MD5总和为合并的CSS文件生成一个新的文件名。 所以每一个具有不同的css文件集合的页面都会得到一个合适的css文件。

要解决caching问题,我还将文件修改时间戳记包含在该散列中,以便每次生成一个新的散列时修改一个css文件。

所以非真实性caching得分的全部优点,但是如果有些东西被改变了,它就会立即可见,因为资源链接已经改变了。

到现在为止还挺好:

唯一的问题是,用于生成has的文件名只是通常在HTML-Head块中直接引用的文件名,并且包括这些文件中的css导入

因此,在css文件中导入的文件的更改不会导致新的散列。

不,我真的不想recursionparsing所有的input和扫描他们或类似的东西。

我宁愿想一个基于目录的解决scheme。 有没有什么可以有效地监视文件系统基础上的“目录内的最后更改”?

我们正在使用ext4。

或者也许有另外一种方法,也许用find命令,它可以完成基于inode索引的所有工作?

类似的东西?

我看到很多程序可以在不扫描整个文件系统的情况下即时“查看”更改。 我相信在Linux下也有一些“文件操作监视”守护进程。

问题是,CSS目录是相当巨大的。

任何人都可以指向正确的方向吗?

Solutions Collecting From Web of "如何有效地监视一个目录在Linux上的变化?"

我建议你使用php独立的守护进程修改你的主要CSS文件的变化日期时,依赖的PHP文件之一被修改。 你可以使用dnotify,如下所示:

dnotify -a -r -b -s /path/to/imported/css/files/ -e touch /path/to/main/css/file; 

每当其他文件夹中的一个文件被修改时(-a -r -b -s =任何访问/递归目录查找/在后台运行/不输出),它将在主css文件上执行“touch”。 或者你可以做任何其他的动作,并从PHP进行测试。

如果你使用这个命令

 ls -ltr `find . -type f ` 

它会给你一个长的最新的所有文件列表底部。

试着看看inotify软件包,这将允许你通知一个目录中修改发生的时间。

  • InotifyTools
  • PHP-的inotify

我从来没有使用它,但显然有inotify支持PHP 。

(inotify将是在Linux下获得通知最有效的方式)