我有一个大约10年的文件存档,这是一个大型目录树结构,在较大的树中的不同位置有多个较小的尝试副本。由于缺乏一致的备份策略和归档策略(基本上都是我自己的错),树变成了这种结构。
我正在寻找一种方法在较大的树中找到相同的树木副本,这样我就可以删除我不需要的副本,让我更接近清理这个大乱。
我以为我可以编写一个脚本来构建树中的文件数据库,这样我就可以编写另一个脚本来查找相同的树,删除树中嵌套最深的树副本。
但是,我不确定如何最好地解决这个问题,在数据库设计和使用什么类型的算法来有效地比较这些树以找到相同的副本。
回顾一下,这就是树的样子:
备份/文件夹1 / 备份/ somecomputer /库/文件夹1 备份/ othercomputer / folder1中 ......
无法保证树是“完整的” - 可能是树相似但只有一个树的副本包含大多数文件和子目录。所以它是关于找到最“完整”的树。
如果有人对如何解决这个问题有任何其他想法,或者有效地清理这样的杂乱结构,而不是遍历每个文件,我将非常感激!
由于 乙
答案 0 :(得分:0)
可能使用后缀树数据结构来查找最长的公共子串 - 甚至可能存在差异,从而表示相似性度量。
创建一个新树,它反映了分层结构中每个文件/目录的新树中一个节点意义上的现有层次结构。
在构建树时:可能递归使用FileFilter进行exapmple,并为每个目录类型的条目降序:
为新树中的每个节点创建从根到该节点的路径。使该路径成为Map的键,其中键是路径,值是新树中的节点引用。
然后,您可以对此映射的keySet使用后缀树算法,以查找共享公共后缀的条目 - 这些条目正是可以被删除的条目。
它处理相同的子树。后缀树还允许识别“未命中”-i.e.如果路径中有一个或多个链接在两个路径之间不同。