比较两个不同目录中相同文件的方法对比

3
有没有工具可以比较两个目录(带有不同的子目录)中同名文件?例如,DirA有子目录DirA1,DirA1有名为file.cpp的文件。DirB有file.cpp。因此,如果我用BC比较这两个目录,BC不会比较这两个文件,它会将它们标记为各自的孤立文件。我们能否编写任何BC脚本来比较这两个文件?PS:我可能在两个文件夹中都有10-100个文件。重点是如何使比较工具查找匹配的文件名,而不考虑目录级别。希望我的问题在这里有意义。
2个回答

4

Beyond Compare 3在查看菜单中提供了一个选项(忽略文件夹结构),正是你所需要的功能。它会遍历每个文件的所有子文件夹,并将它们显示在单个级别中,根据名称对齐文件。如果存在多个具有相同名称的文件,则优先对齐具有相同目录结构的文件。


谢谢Craig...我之前用的是BC2,刚安装了BC3并测试了一下,符合要求。Winmerge或其他开源软件包是否支持此功能? - Bolt
1
@Bolt BC3是我所知道的唯一支持它的,但自从我认真评估我们的竞争对手以来已经有一段时间了。我刚刚运行了在Windows上可用的开源软件,但没有一个支持它。 - Zoë Peterson
BC允许您从内存中下载一个完全功能的试用版本,有效期为30天。下载链接:http://www.scootersoftware.com/download.php - Matthew Lock

2

如果不想编写脚本,这里有一种快速而简单的方法来实现目标:

  1. 创建两个临时目录 - FlatAFlatB
  2. 将原始目录 DirADirB 分别压缩成单独的 zip 文件 - ArchiveA.zipArchiveB.zip
  3. 将两个压缩文件分别解压到 FlatAFlatB 目录中,不包含路径信息
  4. 使用 BeyondCompare 比较 "展开" 后的文件夹 FlatAFlatB

如果在不同的子文件夹中有相同名称的文件怎么办? - NeonGlow
@NeonGlow 他特别想比较两个目录中具有相同名称的文件内容,无论它们的嵌套级别如何,因此似乎在一侧具有相同名称并不是这个任务的问题 - 这就是这个问题的全部意义。在我提出的解决方案中,任何提取工具(例如WinZip)都会提示是否覆盖、跳过或可能重命名具有相同名称的文件(当相对路径被删除时)。 - Cozzamara
我不明白归档如何有帮助。我想我的问题表述不够清晰。我想要一个工具,无论父目录名称如何,都能够比较特定的文件。比如:Dira->DirA1->file.cpp 和 DirB->file.cpp。因此,如果我比较 DirA 和 DirB,file.cpp 不应该成为 Dir B 中的孤儿,该工具应该尝试将 DirB 中的 file.cpp 与 DirA/DirA1 中的 file.cpp 进行比较。这种情况是否可能? - Bolt
我理解你的问题。归档可以帮助你在Windows上最简单地压缩目录(当你解压缩时)- 即将所有子目录中的文件转储到一个单独的目录中。此时,你有两个只包含文件而没有子目录的目录,你可以在它们上面运行BC。 - Cozzamara
是的,正如你所说的,这可能行得通,但我正在寻找一些可以在更短时间内重复使用的解决方案。每次当我更新我的源代码(大约 800MB),我无法进行压缩和解压缩。扁平化目录肯定可以解决问题。但还有其他方法吗? - Bolt
1
如果无法进行归档,我会编写一些脚本(Perl、批处理、Bash等),在两个层次结构之间查找匹配文件,并运行每个匹配对通过diff。然后,它可以将仅具有差异的文件对转储到两个临时目录中,以便由BC手动比较。 - Cozzamara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接