ディレクトリ構造の違いに関係なく、2番目の場所に重複していないファイルは何であるかを調べます。

ディレクトリ構造の違いに関係なく、2番目の場所に重複していないファイルは何であるかを調べます。

私はそれぞれ数十万のファイルを含む2つのディレクトリを持っています。ほとんどのファイルは2つの場所の間で重複しますが、一部はそうではありません。どのファイルが重複しないかを知りたいです。つまり、バックアップされていないファイルをバックアップまたは削除することを選択できます。重要なことは、各ファイルのパスが親ディレクトリとはまったく異なる可能性があることです。一部のファイルは同じですが、名前が異なる場合があり、ツールはチェックサムを比較して出力からこれらのファイルを削除する必要があります。

答え1

この問題を解決するのに役立つfdupesという素晴らしい小さなプログラムがあります。すべての重複アイテムやその他の面白いアイテムを削除するように設定することもできますので注意してください。

答え2

私はこれをあまりテストしていませんが、これまでのところfdupesの解決策は次のとおりです。

#!/usr/bin/env python
# Load a list of files in dir1, dir2, 
# and a list of dupes provided by fdupes,
# and produce a list of files that aren't duplicated.
#
# find dir1 -type f > dir1.txt
# find dir2 -type f > dir2.txt
# fdupes dir1 dir2 -1 > dupes.txt

import sys

# print sys.argv
dir1_file = sys.argv[1]
dir2_file = sys.argv[2]
dupes_file = sys.argv[3]

dir1 = {}
with open(dir1_file) as f:
    for line in f:
        dir1[line.strip()] = True

dir2 = {}
with open(dir2_file) as f:
    for line in f:
        dir2[line.strip()] = True

dupes = {}
with open(dupes_file) as f:
    for line in f:
        (dir1_dupe, dir2_dupe) = line.split()
        rv1 = dir1.pop(dir1_dupe, None)
        rv2 = dir2.pop(dir2_dupe, None)

# print "non dupes:"
for key in dir1.keys():
    print key
for key in dir2.keys():
    print key

関連情報