内容のチェックサムを通じて、どのファイルが存在しないかを探そうとします。システムのランダム状態を/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万を超える結果が出ます)。
次の内容が役に立ちます。