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

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

内容のチェックサムを通じて、どのファイルが存在しないかを探そうとします。システムのランダム状態を/foo表す2つのディレクトリがあり、/barすべてのディレクトリを探したいと思います。文書in root は/barルートには存在しません/foo(再帰的に)。/bar/**辞書

CheckSum -> filepath

/foo/**with 辞書減算

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

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

これは単なる記述ではなく、よく尋ねて解決する質問です(コンテンツごとに重複ファイルを検索すると100万を超える結果が出ます)。

次の内容が役に立ちます。

関連情報