チェックサムに基づいて 2 つのディレクトリを再帰的に比較しますか?

チェックサムに基づいて 2 つのディレクトリを再帰的に比較しますか?

ファイルのチェックサムから存在しないファイルを見つけようとしています。ディレクトリが2つあり/foo/barどちらのディレクトリもシステム上の任意の状態を表しているので、すべてを見つけたいのです。ファイル/barルートに存在しない(再帰的に)ルートにある/foo辞書。/bar/**

CheckSum -> filepath

辞書/foo/**

CheckSum -> filepath  

md5sum などを使用してこれを記述することもできますが、これを行うユーティリティがすでに存在しているはずです。

明確にするために、2つのファイルが同一である場合を除外する場所(名前とパス)によって、それらが同じものとして識別されるようにします。

テストケース

テストデータを使ってツリーを作成しましょう。

/tmp/foo
└── myFile (duplicate of /tmp/bar/quz/asdf/otherFileName)
/tmp/bar
├── qaz
│   └── findMe
└── quz
    └── asdf
        └── otherFileName (duplicate of /tmp/foo/myFile)

作成用スクリプト、

mkdir -p /tmp/foo /tmp/bar/quz/asdf /tmp/bar/qaz

# One file that exists in both locations
dd if=/dev/urandom of=/tmp/foo/myFile bs=1k count=10
cp /tmp/foo/myFile /tmp/bar/quz/asdf/otherFileName

# One file (findMe) that exists in only /mpt/bar/
dd if=/dev/urandom of=/tmp/bar/qaz/findMe bs=1k count=10

/tmp/fooそこで比較して/tmp/bar見つけるプログラム/tmp/bar/qaz/findMe

答え1

両方のツリーに対して md5sum リスト (合計の列とファイル名の列) を生成し、その結果をスクリプト (awk や perl など) にパイプします。このスクリプトは合計をファイル名のハッシュとして使用し、同じハッシュ値を持つファイル名をスクリプトに報告させます。

これは一行で説明できるものではなく、頻繁に質問され、頻繁に解決されるものです (重複ファイルの内容による Web 検索では、100 万件を超えるヒットが表示されます)。

これは役に立つかもしれません:

関連情報