给定两个目录树,如何找出哪些文件的内容不同?[关闭]
- 2024-10-23 08:47:00
- admin 原创
- 71
问题描述:
如果我想找出两个目录树之间的差异,我通常只需执行:
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:
您还可以使用Rsync
和find
。例如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>
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件