0

我有一个价值约 10 年的文件存档,它是一个大型目录树结构,在较大树的不同位置有多个较小尝试的副本。由于缺乏一致的备份策略和归档策略(基本上都是我自己的错),树变成了这种结构。

我正在寻找一种方法来在较大的树中找到相同的树副本,这样我就可以删除我不需要的副本,让我更接近清理这个大混乱。

我想我可以编写一个脚本来在树中建立一个文件数据库,这样我就可以编写另一个脚本来查找相同的树,删除嵌套在树中最深处的树副本。

但是,我不确定如何最好地解决这个问题,在数据库设计方面以及使用哪种算法来有效地比较这些树以找到相同的副本。

回顾一下,这就是树的样子:

备份/文件夹 1/备份/某些计算机/保险库/文件夹 1 备份/其他计算机/文件夹 1 ...

不能保证这些树是“完整的”——它们可能是相似的,但只有一个树的副本包含大多数文件和子目录。所以这是关于找到最“完整”的树。

如果有人对如何解决此问题或有效清理此类杂乱的结构有任何其他想法,而无需查看每个单独的文件,我将不胜感激!

谢谢乙

4

1 回答 1

0

也许使用后缀树数据结构来查找最长的公共子字符串 - 甚至可能存在差异,从而表示相似性度量。

从层次结构的每个文件/目录的新树中的一个节点的意义上,创建一棵反映现有层次结构的新树。

在构建树时:可能递归地使用 FileFilter 并为每个目录类型的条目降序:

为新树中的每个节点创建从根到该节点的路径。使该路径成为 Map 中的键,其中键是路径,值是新树中的节点引用。

然后,您可以针对此映射的 keySet 使用后缀树算法来查找共享公共后缀的条目 - 这些条目正是可以重复数据删除的条目。

这需要处理相同的子树。后缀树还允许识别“未命中”——即路径中是否存在一个或多个在两条路径之间不同的链接。

于 2013-03-03T01:52:10.893 回答