2010-07-27 28 views
1

我正在研究使用jnotify检查更改的目录同步程序。如何在处理多个文件时进行inotify等待

这个想法是,只要jnotify检测到变化,就执行同步。问题是,当许多文件复制到目录或修改目录时,会执行许多同步而不是一个大同步。

理想的情况下,如果你是100个的大文件拷贝到目录中的,不会发生同步到目录B钮直至所有文件完全复制到目录A

我曾经想过,在某种程度上使用一个临时目录( A1)保存文件直到完全复制,然后将它们移动到A1中。但是这个解决方案不能正常工作,因为我正在使用unison来执行只发送文件增量的同步 - 这是我希望使用并且没有规避的功能。

也许有一种方法可以使用i/jnotify来检测多个文件一次更新吗?

回答

1

这是一个建议。如何在你的应用程序中设置一个集合并让它收集“修改过的”文件/等等,它会将该文件添加到一个集合中,并且当文件数量超过一定数量时(比如说100),你就可以进行同步。如果你希望它是合理的响应,那么也建立一个计时器也是一个好主意,就好像如果没有新的变化/等待被添加到该集合中X时间继续并且进行同步也是如此。

+0

感谢您的回复。到目前为止,我认为它可能会如下工作,直到找到更好的解决方案为止......每当发生一个操作(即 - CREATE)时,让侦听器线程等待1秒钟,以查看是否检测到另一个操作。如果未检测到任何操作,请执行同步。然后,一旦同步开始,推迟进一步的呼叫以同步到当前同步完成。如果文件保持同步,则在第一个文件之后执行另一个同步。这将强制同步成批小文件组。或者一次同步一个大文件。这似乎是合理的。 – Jono 2010-09-09 01:32:45

+0

@Jono - 这似乎是合理的,我个人会有更长的延迟时间,但总的想法似乎是合理的,它需要一些工作来实现,但它是可行的。你将如何处理对文件的更改? (直接复制,或类似rsync) – Pharaun 2010-09-09 14:57:46

+0

不知道你的意思是处理文件的更改。我将在整个目录中使用inotify来检查其中的任何更改。 – Jono 2010-09-18 12:30:31

相关问题