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

diff -r dir1/ dir2/

这将准确地输出对应文件之间的差异。我感兴趣的只是获得内容不同的相应文件的列表。我以为这只是向diff传递一个命令行选项的问题,但我在手册页上找不到任何东西。

有什么建议吗?


当前回答

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

meld dir1/ dir2/

Meld有许多比较文件或目录的选项。如果两个文件不同,很容易进入文件比较模式并查看确切的差异。

其他回答

Channel同胞“billings”(freenode/#centos的名声)与我分享了他的方法:

diff -Naur dir1/ dir2

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

此外,在一些较旧的/服务器版本的diff上,-u选项似乎不可用。

diffs中的区别:

# 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

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

用rsync:

rsync --dry-run --recursive --delete --links --checksum --verbose /dir1/ /dir2/ > dirdiff_2.txt

或者,使用diff:

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

它们在功能上是等同的,但性能可能会因以下因素而有所不同:

如果目录在同一个驱动器上,rsync会更快。 如果目录位于两个独立的驱动器上,则diff更快。

这是因为diff将几乎相等的负载并行地放在两个目录上,使两个驱动器上的负载最大化。Rsync在实际比较校验和之前以大块计算校验和。这将i/o操作分组为大块,当事情发生在单个驱动器上时,会导致更有效的处理。

要查找diff,使用以下命令:

diff -qr dir1/ dir2/

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

diff  --brief dir1/ dir2/

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

否则

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

meld  dir1/ dir2/

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

rsync -auv <dirA> <dirB>