关于linux:检测文件是否被修改(即使是在最后一秒钟之内),而不进行散列处理?

Detect if a file was modified, even within the last second, without hashing?

这适用于Mac,但也可能适用于Linux,因此我将其标记为这样。

我正在遍历目录并获取具有文件系统属性的树。

然后,每次窗口重新回到焦点时,我便再次(一次又一次地)递归。当我读取目录时,我正在寻找任何已修改并且需要对其执行操作的文件。

想到的显而易见的事情是比较每个文件的修改日期,但是我的单元测试证明这是不可靠的,因为测试本身在不到一秒钟的时间内执行...结果是我的测试文件已更改被认为是未修改的(因为它仅精确到1秒)。

到目前为止,我的解决方法是也比较文件大小,但这冒着以下风险:如果更改了文件,并且文件大小相同,那么也将无法检测到。

对每个文件进行散列很远,这是不可行的(递归整个目录树时速度太慢),我还能使用HFS / HFS提供的其他功能吗?就像文件附带的某种版本号/修改计数一样?我担心的不是,尽管实际上,在我的单元测试中,文件更改的速度极快,而在实际用例中,这可能不是问题。


实时,最少负载的解决方案:

  • Linux:inotify
  • Mac:kqueue

请注意,有关修改时间分辨率的问题仅适用于HFS。

最常用的跨平台解决方案是文件变更监视器。

其他链接:

  • 检测目录中是否有内容被修改,如果是,则进行备份-否则不执行任何操作
  • 目录监控程序
  • http://en.wikipedia.org/wiki/Inotify
  • http://en.wikipedia.org/wiki/HFS+
  • http://en.wikipedia.org/wiki/Kqueue