处理多个文件时如何使inotify等待
Posted
技术标签:
【中文标题】处理多个文件时如何使inotify等待【英文标题】:How to make inotify wait when processing multiple files 【发布时间】:2010-07-27 17:42:28 【问题描述】:我正在开发一个使用 jnotify 检查更改的目录同步程序。
这个想法是每当 jnotify 检测到更改时,就会执行同步。问题是,当一个目录中复制或修改许多文件时,会执行许多同步而不是一次大同步。
理想情况下,如果您要将 100 个大文件复制到目录 A,则在所有文件完全复制到目录 A 之前,不会同步到目录 B。
我曾想过以某种方式使用临时目录 (A1) 来保存文件,直到它们被完全复制,然后将它们移动到 A1。但是这个解决方案不能很好地工作,因为我使用 unison 来执行只发送文件增量的同步 - 这是我想使用而不是规避的功能。
也许有一种方法可以使用 i/jnotify 来检测多个文件何时被同时更新?
【问题讨论】:
【参考方案1】:这里有一个建议。如何在您的应用程序上设置一个集合并让它收集“修改过的”文件/等,它将将该文件添加到一个集合中,当文件数量超过一定数量时,比如 100,然后您将进行同步.如果您希望它具有合理的响应性,那么设置一个计时器也是一个好主意,例如如果在 X 时间内没有新的更改/等被添加到集合中,请继续进行同步.
【讨论】:
感谢您的回复。到目前为止,我认为它可能会按如下方式工作,直到我找到更好的解决方案......每当发生一个动作(即 - CREATE)时,让一个侦听器线程等待最多 1 秒,看看是否检测到另一个动作。如果未检测到任何操作,则执行同步。然后,一旦启动同步,就推迟对同步的进一步调用,直到当前同步完成。如果要同步文件,请在第一个同步之后执行另一个同步。这将强制同步成批的小文件组。或者一次同步一个大文件。这似乎有点合理。 @Jono - 这似乎是合理的,我个人会延迟更长的时间,但总体思路似乎是合理的,它需要一些工作来实现,但它是可行的。您将如何处理对文件的更改? (直接复制,或类似 rsync) 不确定处理文件更改是什么意思。我将在整个目录上使用 inotify 来检查其中的任何更改。 我的意思是,您将如何复制更改的文件/目录?也就是每次都使用 rsync 还是常规复制? 啊。我打算使用统一。我需要两种方式同步。我更喜欢用 Java 编写的可以更好地与我的代码集成的东西,但它似乎是完成这项工作的最佳工具。以上是关于处理多个文件时如何使inotify等待的主要内容,如果未能解决你的问题,请参考以下文章