0

私は、大きなディレクトリ ツリー構造である約 10 年分のファイルのアーカイブを持っており、大きなツリーのさまざまな場所に小さな試行の複数のコピーがあります。一貫したバックアップ戦略とファイリング戦略が欠如しているため、ツリーはこの構造に成長しました (基本的に、すべて私自身の責任です)。

不要なコピーを削除して、この大きな混乱を一掃することに一歩近づくことができるように、大きなツリーでツリーの同一のコピーを見つける方法を探しています。

ツリー内のファイルのデータベースを構築するスクリプトを作成できると思いました。その結果、同一のツリーを見つけて、ツリーの最も深くネストされているツリーのコピーを削除する別のスクリプトを作成できるようになりました。

ただし、データベースの設計と、これらのツリーを効率的に比較して同一のコピーを見つけるために使用するアルゴリズムの種類に関して、これを行う最善の方法がわかりません。

要約すると、ツリーは次のようになります。

backups/folder1/ backups/somecomputer/vault/folder1 backups/othercomputer/folder1 ...

ツリーが「完全」であるという保証はありません。ツリーが似ていても、ほとんどのファイルとサブディレクトリが含まれるツリーのコピーが 1 つだけである可能性があります。つまり、最も「完全な」ツリーを見つけることです。

この問題を解決する方法、または個々のファイルをすべて調べずに、このような雑然とした構造を効率的にクリーンアップする方法について、誰か他のアイデアがあれば、私は非常に感謝しています!

ありがとうB

4

1 に答える 1

0

サフィックス ツリーのデータ構造を使用して、最長の共通部分文字列を見つけることができます。違いがある場合でも、類似度を表す可能性があります。

階層構造のファイル/ディレクトリごとに新しいツリーの 1 つのノードという意味で、既存の階層を反映する新しいツリーを作成します。

ツリーを構築するとき: たとえば、FileFilter を使用して再帰的に、ディレクトリ タイプである各エントリに対して降順である可能性があります。

新しいツリーのノードごとに、ルートからそのノードまでのパスを作成します。そのパスを Map へのキーにします。キーはパスで、値は新しいツリーのノード参照です。

次に、このマップのキーセットに対してサフィックス ツリー アルゴリズムを使用して、共通のサフィックスを共有するエントリを見つけることができます。これは、正確に重複排除できるエントリです。

これにより、同一のサブツリーが処理されます。サフィックス ツリーは、「ミス」の識別も可能にします。つまり、2 つのパス間で異なるパスに 1 つ以上のリンクがあった場合です。

于 2013-03-03T01:52:10.893 に答える