给定两个目录树,如何找出哪些文件的内容不同?[关闭]

2024-10-23 08:47:00
admin
原创
71
摘要:问题描述:如果我想找出两个目录树之间的差异,我通常只需执行:diff -r dir1/ dir2/ 这将准确输出相应文件之间的差异。我感兴趣的只是获取内容不同的相应文件的列表。我以为这只需将命令行选项传递给diff,但我在手册页上找不到任何内容。有什么建议吗?解决方案 1:尝试:diff --brief --...

问题描述:

如果我想找出两个目录树之间的差异,我通常只需执行:

diff -r dir1/ dir2/

这将准确输出相应文件之间的差异。我感兴趣的只是获取内容不同的相应文件的列表。我以为这只需将命令行选项传递给diff,但我在手册页上找不到任何内容。

有什么建议吗?


解决方案 1:

尝试:

diff --brief --recursive dir1/ dir2/

或者,使用短标志-qr

diff -qr dir1/ dir2/

如果您还想查看两个目录中可能不存在的文件的差异:

diff --brief --recursive --new-file dir1/ dir2/  # with long options
diff -qrN dir1/ dir2/                            # with short flag aliases

解决方案 2:

我使用的命令是:

diff -qr dir1/ dir2/

它与 Mark 的完全一样 :) 但他的答案让我很困惑,因为它使用了不同类型的标志,让我看了两遍。使用 Mark 更详细的标志,它将是:

diff  --brief --recursive dir1/ dir2/

当其他答案完全可以接受时,我为发布此答案而道歉。我无法控制自己……努力变得不那么迂腐。

解决方案 3:

我喜欢使用git diff --no-index dir1/ dir2/,因为它可以显示颜色的差异(如果您在 git 配置中设置了该选项),并且因为它使用“less”在长分页输出中显示所有差异。

解决方案 4:

使用rsync

rsync --dry-run --recursive --delete --links --checksum --verbose /dir1/ /dir2/ > dirdiff_2.txt
# or same in short
rsync -nrlcv --delete /dir{1,2}/ > dirdiff_2.txt

或者,使用diff

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt
# or same in short
diff -qrN --no-dereference --no-ignore-file-name-case /dir{1,2} > dirdiff_1.txt

它们在功能上是等效的,但性能可能会有所不同,具体取决于:

  • 如果目录位于同一驱动器上,rsync 速度会更快。

  • 如果目录位于两个独立的驱动器上,diff 速度会更快。

这是因为 diff 会同时对两个目录施加几乎相等的负载,从而最大化两个驱动器的负载。rsync 在实际比较之前会以大块的形式计算校验和。这会将 i/o 操作分组为大块,从而在单个驱动器上发生事件时实现更高效的处理。

解决方案 5:

Meld也是一个用于比较两个目录的好工具:

meld dir1/ dir2/

Meld 有很多选项可用于比较文件或目录。如果两个文件不同,可以轻松进入文件比较模式并查看确切的差异。

解决方案 6:

频道同胞‘billings’(freenode/#centos 名人)与我分享了他的方法:

diff -Naur dir1/ dir2

包括最后的目录正斜杠并不重要。

此外,看来该-u选项在某些旧版本/服务器版本的 diff 上不可用。

diff 的区别:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ

解决方案 7:

要查找差异,请使用以下命令:

diff -qr dir1/ dir2/

-r也将区分所有子目录 -q告诉 diff 仅在文件不同时报告。

diff  --brief dir1/ dir2/

--brief将显示目录中不存在的文件。

否则

我们可以使用 Meld,它将在图形窗口中显示,很容易找到差异。

meld  dir1/ dir2/

解决方案 8:

Diffoscope是一款出色的基于命令行的目录差异工具。

我特别喜欢它的一个功能:它可以区分文件

它会递归解压多种类型的档案,并将各种二进制格式转换为更易于阅读的形式,以便进行比较。它可以轻松比较两个 tarball、ISO 映像或 PDF。

它不仅会告诉您哪些文件不同,还会告诉您它们有何不同。

解决方案 9:

您还可以使用Rsyncfind。例如find

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

但具有相同名称和位于相同子文件夹中但具有不同内容的文件将不会显示在列表中。

如果你是 GUI 的粉丝,你可以看看@Alexander提到的Meld。它在 Windows 和 Linux 上都能很好地运行。

解决方案 10:

要报告 dirA 和 dirB 之间的差异,同时更新/同步:

rsync -auv <dirA> <dirB>
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用