gpt4 book ai didi

linux - 在不同目录中查找具有相同名称的文件并计算重复项

转载 作者:太空狗 更新时间:2023-10-29 12:05:46 25 4
gpt4 key购买 nike

希望你能帮我解决下面的问题。我有 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 个目录,所以我想我可能会使用蛮力方法。类似的东西

  1. 计算所有 24 个目录中出现的所有重复文件
  2. 删除目录并统计重复文件的数量
  3. 替换目录并删除另一个然后计数
  4. 对所有目录重复
  5. 获取重复文件数最多的23个目录的子集
  6. 重复上述2-5,保留重复文件最多的22个目录
  7. 重复直到只剩下 2 个目录
  8. 选择重复文件数最多的目录组合

如果有人有办法做到这一点,我将非常感谢您提供一些建议。我想过使用 fdupesdiff 但不知道如何解析输出和总结。

最佳答案

我用 algorithm 标记了你的问题,因为我不知道有任何现有的 bash/linux 工具可以帮助你直接解决这个问题。最简单的方法是使用 Python、C++ 或 Java 等编程语言来构建算法,而不是使用 bash shell。

话虽这么说,但这是对您的问题的高级分析:乍一看,它看起来像是一个最小集合覆盖问题,但实际上分为两部分:


第 1 部分 - 要涵盖的文件集是什么?

您想找到包含最多重复文件的目录组合。但首先您需要知道 24 个目录中的最大重复文件集是多少。

由于 2 个目录之间的文件交集总是大于或等于与第 3 个目录的交集,因此您遍历所有目录对并找出最大交集集是什么:

(24 choose 2) = 276 comparisons

您将找到的最大交集用作您实际要覆盖的集。


第 2 部分 - 最小集覆盖问题

这是一个 well-studied problem in computer science , 所以你最好阅读 the writings of people much smarter than I .

我唯一要注意的是它是一个 NP-Complete problem ,所以这不是微不足道的。


这是我能做的最好的事情来解决你问题的原始表述,但我觉得这对于你实际需要完成的事情来说有点过分了。您应该考虑用您需要解决的实际问题来更新您的问题。

关于linux - 在不同目录中查找具有相同名称的文件并计算重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com