给定两个目录树,我怎样才能找出哪些文件不同?

如果我想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。

它不仅会告诉你哪些文件有差异,而且还会有不同。