代码之家  ›  专栏  ›  技术社区  ›  Simon B. Matt Ball

任何linux API或工具是否可以监视下面任何文件夹(例如/SharedRoot)中的任何更改,或者是否必须为每个文件夹设置(例如inotify)?

  •  2
  • Simon B. Matt Ball  · 技术社区  · 15 年前

    任何linux API或工具是否可以监视下面任何文件夹中的任何更改,例如/sharedoot,或者我是否必须为每个文件夹设置inotify?(也就是说,如果我想对10k以上的文件夹执行此操作,我会松开)。我想是的,因为我已经见过这种低效方法的例子,例如 http://twistedmatrix.com/trac/browser/trunk/twisted/internet/inotify.py?rev=28866#L345

    我的问题是:

    当文件更改时,该文件上方的每个文件夹都应更新其上次修改的时间戳以匹配该文件。延迟是可以的。打开一个文件(通常是MS-Excel)并再次关闭,它的文件日期可以上下跳跃。因此,我需要等到一个文件关闭后,再将该文件的文件夹排队等待检查,过一段时间我才去查找其文件夹中的最新文件,因为触发文件的filedate可能已经被Excel或类似程序追溯到其原始时间戳。同样,在使用/创建同一文件夹中的多个文件的情况下,缓冲该文件夹的父文件夹的时间戳是有意义的,至少可以将一堆更新折叠成一个延迟更新。

    我正在寻找一个linux解决方案。我有一些可以在windows服务器上运行的代码,大部分查询功能都在这里: http://github.com/sesam/FolderdateFollowsFiles/blob/master/FolderdateFollowsFiles/Follower.vb

    可用API:s公司
    windows上inotify的相对变量ReadDirectoryChangesW可以监视文件夹及其整个子树;请参见上的bWatchSubtree http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    8 年前

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

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

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

    看到了吗 this question this RFQ . 我遇到了和你一样的问题。

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

    我尝试了上述的无锁版本,但是。。可疑。。成功:)

        2
  •  1
  •   Peter Tillemans    15 年前

    Samba Howto : Stackable VFS Modules

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

    只是一个想法。