我想做什么:
我有两个目录。每个包含大约90.000 xml和bak文件。
当文件发生变化时,我需要在两个文件夹中同步xml文件(当然应该复制较新的文件)。
问题是:
由于存在大量文件以及其中一个目录是网络共享这一事实,我不能只通过目录循环并比较os.path.getmtime(file)
值。
即使看门狗和PyQt也不起作用(尝试过here和here的解决方案。)
问题:
是否有其他方法可以获取文件更改事件(在Windows系统上),这些事件适用于那些配置而不会循环所有这些文件?
答案 0 :(得分:1)
答案 1 :(得分:1)
我冒着在这里给出答案的风险(你没有说明关于速度的要求等),但...... Dropbox会为你免费做到这一点,并且需要写不代码。
当然,如果您需要实时同步,或者您希望避免与第三方“共享”文件(尽管您可以先加密它们),它可能不适合您的需求。
答案 2 :(得分:1)
所以我终于找到了解决方案: 我更改了部分网络共享设置并使用了FileSystemWatcher
为防止文件在同步时同步,请使用md5 filehash。
我使用的代码可以在pastebin找到(这是一个快速而又脏的代码,只是这里提到的问题部分)。
答案 3 :(得分:0)
答案 4 :(得分:0)
从提到看门狗,我假设您在Linux下运行。对于本地机器inotify可以提供帮助,但对于网络共享你运气不好。 Mercurial的inotify扩展http://hgbook.red-bean.com/read/adding-functionality-with-extensions.html具有相同的限制。
在类似的情况下(10K +文件)我在服务器和本地机器上都使用了带有inotify的克隆mercurial存储库。他们会自动提交并相互通知更改。它有一点延迟(在我的情况下没问题),但作为一个好人有一个完整的历史 在其中一个系统停机后,变化很容易恢复。