有几条路径,例如:
1: /abc/def/some/common/part/xyz/file1.ext
2: /other/path/to/7433/qwe/some/common/part/anotherfile.ext
3: /misc/path/7433/qwe/some/common/part/filexx.ext
4: /2443/totally/different/path/file9988.ext
5: /abc/another/same/path/to/ppp/thisfile.ext
6: /deep1/deep2/another/same/path/to/diffone/filename.ext
我需要找到共同的部分 - 每个可能的部分,例如。如果可能的话,在上面找到共同的部分:
/some/common/part/ - in the paths 1,2,3
/another/same/path/to/ - in the 5,6
/path/to/ - in the 2,5,6
/path/ - 2,3,4,5,6
ETC..
我根本不知道如何解决这个问题 - 什么方法是好的
- 基于字符串 -在某种程度上找到字符串的共同部分
- 基于列表 - 将所有路径拆分为列表并在某种程度上比较常见元素的数组
- 树图 -有点找到图的共同部分
- 其他?
当我得到一些解决这个问题的方向时,我(可能)能够自己编写代码- 所以不想要免费的编程服务- 但需要一些指导如何开始。
我确定这里已经有一些 CPAN 模块可以帮助我,但我真的不知道如何从 30k 模块列表中找到适合上述问题的正确有用模块。:(
编辑 - 我需要这个:
拥有约。200k 个文件,位于 10k 个目录中,其中许多“属于一起”,例如:
/u/some/path/project1/subprojct/file1
/u/backup/of/work/date/project1/subproject/file2
/u/backup_of_backup/of/work/date/project1/subproject/file2
/u/new/addtions/to/projec1/subproject/file3
这些文件是不同类型的(pdf、图像、doc、txt 等),有几个是相同的(如上面的 file2 - 易于使用 Digest::MD5 过滤),但“将它们组合在一起”的唯一方法是基于“common路径的“部分” - 例如“project1/subproject”等等..
另一个文件具有相同的 MD5,因此可以过滤掉重复项,但它们位于不同的树中,例如
/u/path/some/file
/u/path/lastest_project/menu/file
/u/path/jquery/menu/file
/u/path/example/solution/jquery/menu/file
因此,文件是相同的(相同的 md5),但需要将一个副本移动到正确的位置(并删除其他文件),并且需要在一定程度上确定“最常用”的公共路径,并收集标签......(旧路径元素是标签)
背后的想法是:
- 如果相同的 md5 文件大多存储在某个公共路径下- 我可以决定将一份副本移动到哪里......
而且它更复杂,但上面的解释就足够了;)
只需要降低我的硬盘上的熵;)