2

我有一个包含约 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
inotify 在windows 上的亲戚ReadDirectoryChangesW,可以监视一个文件夹及其整个子树;请参阅http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx上的 bWatchSubtree

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

4

2 回答 2

1

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

这个过程(类似于 beagle 的做法)相当简单:

  1. 在根节点上建立监视。
  2. 从根节点开始进行广度优先(不是深度优先)搜索
  3. 按搜索顺序在目录上建立监视。
  4. 注意目录创建事件,继续添加。发生这种情况时重新排序您的列表。

广度优先搜索很重要,否则您可能会因为开始时间和根节点的客户端正在做什么而错过一些东西。

请参阅这个问题,其中也提到了这个 RFQ。我遇到了与您面临的完全相同的问题。

本质上,一个线程继续监视目录创建事件,几乎在创建新目录的同时在新目录上添加新监视。其他的东西要么按需排序,要么在 inotify 线程释放它的锁之后排序。

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

于 2010-05-21T11:33:20.447 回答
1

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

Samba Howto:可堆叠的 VFS 模块

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

只是一个想法。

于 2010-05-27T16:22:31.260 回答