
ファイルのチェックサムから存在しないファイルを見つけようとしています。ディレクトリが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 万件を超えるヒットが表示されます)。
これは役に立つかもしれません: