【发布时间】:2012-11-20 16:55:12
【问题描述】:
希望您能帮我解决以下问题。我有 24 个目录,每个目录包含许多(1000 个)文件。我想找出哪个目录组合包含最多的重复(仅按名称)文件。例如,如果我们只考虑 4 个目录
目录 1 目录 2 目录 3 目录 4
具有以下目录内容
目录1
1.fa 2.fa 3.fa 4.fa 5.fa
目录2
1.fa 10.fa 15.fa
目录 3
1.fa 2.fa 3.fa
目录4
1.fa 2.fa 3.fa 5.fa 8.fa 10.fa
因此,目录 dir1 和 dir4 的组合包含最多重复文件 (4)。
24 个目录的问题变得非常大,所以我想我可能会使用蛮力方法。类似于
- 统计所有 24 个目录中出现的所有重复文件
- 删除目录并计算重复文件的数量
- 替换目录并删除另一个然后数数
- 对所有目录重复
- 获取最大重复文件数的 23 个目录的子集
- 重复以上2-5,保留重复文件最多的22个目录
- 重复直到只剩下 2 个目录
- 选择具有最大重复文件数的目录组合
如果有人有办法做到这一点,我将非常感谢您提供一些建议。我想过使用fdupes 或diff,但不知道如何解析输出和总结。
【问题讨论】:
-
您仅限于使用 shl 脚本还是可以使用 Perl/Python?
-
我在 perl 或 python 方面没有很多经验,但我愿意尝试一下!
-
当您说
which combination of directories...时,您的意思是which 2 directories,还是what is the least number of directories that...?如果您的“目录组合”的数量没有限制,那么O(1)的答案始终只是获取所有目录,并且始终包含最多数量的重复文件。如果您的意思是选择 2 个目录,P时间有聪明的解决方案。如果您的意思是选择具有最多重复项的最小目录集,这将简化为最小集覆盖问题,即NP -
@sampson-chen 感谢您的评论。为了澄清,我想要最少数量的重复最多的目录
-
这 24 个目录是全部嵌套在一个父目录下,还是分散在文件系统中?