4

私がしたいこと:

2 つのディレクトリを取得しました。それぞれに約 90.000 の xml ファイルと bak ファイルが含まれています。

ファイルが変更されたときに両方のフォルダーで同期するには、xml ファイルが必要です (もちろん、新しい方をコピーする必要があります)。

問題は:

膨大な量のファイルと、ディレクトリの 1 つがネットワーク共有であるという事実のため、ディレクトリをループして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

ウォッチドッグについて言及すると、Linuxで実行していると思います。ローカルマシンの場合はinotifyが役立ちますが、ネットワーク共有の場合は運が悪いです。Mercurialのinotify拡張機能http://hgbook.red-bean.com/read/adding-functionality-with-extensions.html にも同じ制限があります。

同様の状況(10K以上のファイル)で、サーバーとローカルマシンの両方でinotifyを使用してクローン化されたMercurialリポジトリを使用しました。彼らは自動的にコミットし、お互いに変更を通知します。わずかな遅延がありましたが(私の場合は問題ありません)、メリットには変更の完全な履歴があり、システムの1つがダウンした後に簡単に再同期できました。

于 2013-03-07T09:51:15.580 に答える
0

このページの 2 番目のオプションを使用できますか?

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

于 2013-02-23T21:36:01.947 に答える