给定两个目录树,我怎样才能找出哪些文件不同?
如果我想find两个目录树之间的差异,我通常只是执行:
diff -r dir1/ dir2/
这将正好输出相应文件之间的差异。 我感兴趣的是获取内容不同的相应文件的列表。 我认为这只是一个传递命令行选项来diff
,但是我在man page上找不到任何东西。
有什么build议么?
你说的Linux,所以你运气(至less它应该是可用的,不知道什么时候被添加):
diff --brief -r dir1/ dir2/
应该做你需要的。
如果您还想查看两个目录中可能不存在的文件的差异:
diff --brief -Nr dir1/ dir2/
我使用的命令是:
diff -qr dir1/ dir2/
这跟Mark的一模一样:)但他的回答使我感到困扰,因为它使用了不同types的旗帜,而且让我看起来两次。 使用Mark的更详细的标志,它将是:
diff --brief --recursive dir1/ dir2/
我道歉发布时,其他答案是完全可以接受的。 无法阻止自己…努力不那么迂腐。
我喜欢使用git diff --no-index dir1/ dir2/
,因为它可以显示颜色的差异(如果你在gitconfiguration中设置了这个选项),并且它显示了长分页输出的所有差异“减”。
这两个命令基本上是要求的东西:
diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt rsync --recursive --delete --links --checksum --verbose --dry-run /dir1/ /dir2/ > dirdiff_2.txt
它们之间的select取决于dir1和dir2的位置:
当目录驻留在两个独立的驱动器上,diff比rsync好。 但是当比较两个目录在同一个驱动器上时,rsync会更快。 这是因为diff在两个目录上并行地施加了几乎相等的负载,使两个驱动器的负载最大化。
在实际比较之前,rsync在大块中计算校验和。 将大量数据块的I / O操作分组,并在事件发生在单个驱动器上时导致更高效的处理。
渠道同胞“billings”(freenode /#centos名气)与我分享他的方法:
diff -Naur dir1/ dir2
包括最终目录的正斜杠并不重要。
此外,它似乎-u
选项不适用于一些较旧/服务器版本的差异。
差异的差异:
# 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
Meld也是比较两个目录的好工具:
meld dir1/ dir2/
Meld有很多用于比较文件或目录的选项。 如果两个文件不同,则很容易进入文件比较模式并查看确切的区别。
Diffoscope是一个很好的基于命令行的目录diff工具。
我特别喜欢它可以分解成文件:
它将recursion地解压缩多种types的档案,并将各种二进制格式转换成更可读的forms来比较它们。 它可以轻松比较两个tarball,ISO映像或PDF。
它不仅会告诉你哪些文件有差异,而且还会有不同。