4

我想做的事:

我有两个目录。每个包含大约 90.000 个 xml 和 bak 文件。

当文件更改时,我需要 xml 文件在两个文件夹中同步(当然应该复制较新的文件)。

问题是:

由于文件数量巨大,而且其中一个目录是网络共享,我不能只循环目录并比较os.path.getmtime(file)值。

甚至看门狗和 PyQt 也不起作用(从这里这里尝试了解决方案)。

问题:

有没有其他方法来获取文件更改事件(在 Windows 系统上),它适用于那些配置而不循环所有这些文件?

4

5 回答 5

2

所以我终于找到了解决方案:我更改了一些网络共享设置并使用了FileSystemWatcher

为了防止文件在同步时同步,我使用 md5 文件哈希。

我使用的代码可以在pastebin找到(这是一个快速而肮脏的代码,只是这里的问题中提到的部分)。

于 2013-03-08T15:05:02.683 回答
1

中的代码...

https://stackoverflow.com/a/12345282/976427

通过网络共享时似乎对我有用。

于 2013-02-28T18:47:57.220 回答
1

我冒着给出一个离这里很远的答案的风险(你没有指定关于速度等的要求)但是...... Dropbox会免费为你做这件事,并且根本不需要编写任何代码。

当然,如果您需要实时同步,或者您想避免与第三方“共享”您的文件(尽管您可以先加密它们),它可能不适合您的需求。

于 2013-03-07T06:38:30.143 回答
0

您可以使用此页面上的第二个选项吗?

http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html

于 2013-02-23T21:36:01.947 回答
0

提到看门狗,我假设您在 Linux 下运行。对于本地机器 inotify 可以提供帮助,但对于网络共享,您就不走运了。Mercurial 的 inotify 扩展http://hgbook.red-bean.com/read/adding-functionality-with-extensions.html 有同样的限制。

在类似的情况下(10K+ 文件),我在服务器和本地机器上都使用了带有 inotify 的克隆 mercurial 存储库。他们自动提交并通知对方更改。它有一点延迟(在我的情况下没问题),但作为一个好处,它有完整的更改历史,并且在其中一个系统关闭后很容易重新同步。

于 2013-03-07T09:51:15.580 回答