任何Linux API或工具都可以监视下面任何文件夹中的任何更改,例如/ SharedRoot或我必须设置,例如为每个文件夹inotify?

时间:2010-05-11 02:18:06

标签: samba inotify readdirectorychangesw

我有一个包含~10 000个子文件夹的文件夹。

任何Linux API或工具都可以监视以下任何文件夹中的任何更改,例如/ SharedRoot还是我必须为每个文件夹设置inotify? (即如果我想为10k +文件夹执行此操作,我会松动)。我想是的,因为我已经看过这种低效方法的例子,例如http://twistedmatrix.com/trac/browser/trunk/twisted/internet/inotify.py?rev=28866#L345

我的问题:
我需要将文件夹的时间排序与最近最活跃的“项目”排在最前面。

当文件发生更改时,该文件上方的每个文件夹都应更新其上次修改的时间戳以匹配该文件。延迟是可以的。打开文件(通常是MS Excel)并再次关闭,其文件日期可以再次跳起然后再下降。出于这个原因,我需要等到文件关闭后,然后排队该文件的文件夹进行检查,过了一会儿我就去查找其文件夹中的最新文件,因为触发文件的归档可以已经通过Excel或类似程序回溯到其原始时间戳。此外,如果使用/创建了来自同一文件夹的多个文件,则缓冲该文件夹父项的时间戳是至关重要的,至少可以将一堆更新折叠为一个延迟更新。

我正在寻找一个Linux解决方案。我有一些可以在Windows服务器上运行的代码,大多数排队功能在这里:http://github.com/sesam/FolderdateFollowsFiles/blob/master/FolderdateFollowsFiles/Follower.vb

可用API:s
Windows上的inotify的相对内容,ReadDirectoryChangesW,可以观看文件夹及其整个子树;请参阅http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx

上的bWatchSubtree

桑巴?
修补samba源是可能的,但也许已经有钩子了?其他可能性,如客户端(各种Windows版本)和间谍文件活动,以递归更新文件夹?

2 个答案:

答案 0 :(得分:1)

是的,您需要使用inotify,但不需要立即在每个节点上使用手表。

这个过程(类似于比格尔的做法)非常简单:

  1. 在根节点上建立监视。
  2. 从根节点开始执行 广度 (不是 深度优先 )搜索
  3. 按照搜索顺序在目录上建立监视。
  4. 观察目录创建事件,继续添加。发生这种情况时,请重新排序列表。
  5. 广度优先搜索很重要,否则你可能会错过一些东西,因为你开始时的比赛以及根节点的客户端正在做什么。

    请参阅this question,其中还提到了this RFQ。我遇到了你面临的同样问题。

    本质上,一个线程继续监视目录创建事件,几乎在创建它们的同时在新目录上添加新监视。其他东西可以按需对列表进行排序,也可以在inotify线程释放锁定之后对其进行排序。

    我尝试过上面的无锁版本,但是......有问题......成功:)

答案 1 :(得分:1)

我看到你在Samba共享下运行这些树。也许您可以使用ClamAV病毒扫描VFS模块获取灵感,看看它们是如何触发'扫描关闭'。

Samba Howto : Stackable VFS Modules

检查关闭文件的时间并修改导致它的目录路径应该非常简单,而没有任何与inotify等相关的性能/内存开销。

只是一个想法。