2 つのディレクトリを再帰的に通過し、filename:sha256hash を folder1 と folder2 の 2 つの辞書に入れるプログラムがあります。
私がやりたいのは、ハッシュの比較であり、ハッシュが一致してもキーが異なる場合は、キーを「名前変更済み」と呼ばれる新しいリストに公開します。削除されたファイル、新しいファイル、およびキーが同じで値 (ハッシュ) が異なるファイル (変更されたファイル) を説明するためのロジックが用意されていますが、一生頭を悩ませることはできません。反対。
# Put filename:hash into 2 dictionaries from the folders to compare
for root, dirs, files in os.walk(folder_1):
for file in files:
files1[file] = get_hash(os.path.join(root,file))
for root, dirs, files in os.walk(folder_2):
for file in files:
files2[file] = get_hash(os.path.join(root, file))
# Set up the operations to do for the comparison
set_files2, set_files1 = set(files2.keys()), set(files1.keys())
intersect = set_files2.intersection(set_files1)
# Compare and add to list for display
created.extend(set_files2 - intersect)
deleted.extend(set_files1 - intersect)
modified.extend(set(k for k in intersect if files1[k] != files2[k]))
unchanged.extend(set(k for k in intersect if files1[k] == files2[k]))
これに関する問題は、1: 名前が変更されたファイルを考慮していない、2: 名前が変更されたファイルを作成済みに配置するため、ファイルの名前を変更したら、作成する必要がある = 作成 - 名前を変更して、実際の新しいファイルからそれらを除外する必要があります。
あらゆる/すべての助けをいただければ幸いです。ここまで来たのに、なぜか心がストライキ中。