2

現在、増分データ移行が発生した後にディレクトリを比較する必要があります。ソース/宛先のリストを反復処理し、ソースから宛先への増分コピーを実行し、すぐに各ディレクトリ内のファイルとフォルダーの数を比較する Python スクリプトを作成しました。この比較を行うには、非常に単純に次を使用します。

for (path, dirs, files) in os.walk(destd):

destFileCount += len(ファイル)

destDirCount += len(ディレクトリ)

返されたファイル/ディレクトリの数が異なる場合は、コードの別のセクションを呼び出して、何が違うのかを正確に確認します。これを行うには、次を実行し、出力をファイルに送信します。

filecmp.dircmp(sourced, destd).report_full_closure()

再帰的な比較を行う別の方法がわからないので、report_full_closure ピースを使用します。次に、スクリプトは結果のファイルで「only in」で始まる行を検索し、それらを画面に出力して、効果的に違いを示します。

非効率的ですが、これはファイル数が 90,000 未満のディレクトリでは魅力的に機能しますが、その上限に達すると、この目的に使用するのが現実的ではない程度までスクリプトが遅くなります。私の質問は次のように分けることができると思います。

  1. これらのモジュール [os.walk + filecmp.dircmp().report_full_closure()] の両方を使用すると、論理的なエラーが発生しますか? つまり、filecmp をスキップすることで本当に時間を節約できているのでしょうか、それとも filecmp だけを実行してファイル/ディレクトリのカウントをすべてスキップするべきでしょうか?

  2. これらの 2 つの機能を、一方のファイルを他方で使用するために「キャッシュ」することで組み合わせる方法はありますか?

  3. これらの機能のいずれかを実行するより迅速な方法はありますか? 私は高低を検索したので、ないと思います。

この件についてのご意見、誠にありがとうございます。このスクリプトはかなり変形して成長しているので、答えが非常に明白である場合はご容赦ください...ありがとう、M

4

1 に答える 1

0

私はこのようなことをします:

dir_diff = filecmp.dircmp(sourced, destd)
if dir_diff.left_only or dir_diff.right_only:
    dir_diff.report_full_closure()

編集: filecmp モジュールに関する素敵なブログがあります

dircmp によって返される差異が正確でない理由は 2 つあります。2. 面白いファイル - ディレクトリへのファイルの名前変更などは、共通の下に表示されます。したがって、dir_diff.common_funny も考慮する必要があります。変更されたコードは次のとおりです。

dir_diff = filecmp.dircmp(sourced, destd)
if dir_diff.left_only or dir_diff.right_only or dir_diff.common_funny:
    dir_diff.report_full_closure()
于 2012-06-28T06:11:51.303 に答える