Man*_*qui 743 unix linux bash shell diff
如果我想找到两个目录树之间的差异,我通常只执行:
diff -r dir1/ dir2/
Run Code Online (Sandbox Code Playgroud)
这准确地输出了相应文件之间的差异.我有兴趣只获取内容不同的相应文件列表.我假设这只是一个传递命令行选项的问题diff,但我在手册页上找不到任何内容.
有什么建议?
Mar*_*ser 1069
你说Linux,所以你运气好了(至少它应该可用,不确定何时添加):
diff --brief --recursive dir1/ dir2/ # GNU long options
diff -qr dir1/ dir2/ # common short options
Run Code Online (Sandbox Code Playgroud)
应该做你需要的.
如果您还想查看任一目录中可能不存在的文件的差异:
diff --brief --recursive --new-file dir1/ dir2/ # GNU long options
diff -qrN dir1/ dir2/ # common short options
Run Code Online (Sandbox Code Playgroud)
FPC*_*FPC 283
我使用的命令是:
diff -qr dir1/ dir2/
Run Code Online (Sandbox Code Playgroud)
它与马克的完全相同:)但是他的回答让我困扰,因为它使用了不同类型的旗帜,它让我看了两次.使用Mark的更详细的标志,它将是:
diff --brief --recursive dir1/ dir2/
Run Code Online (Sandbox Code Playgroud)
当其他答案完全可以接受时,我为发布而道歉.无法阻止自己...努力减少迂腐.
Ala*_*ter 99
我喜欢使用git diff --no-index dir1/ dir2/,因为它可以显示颜色的差异(如果你在git配置中设置了该选项),并且因为它显示了使用"less"的长分页输出中的所有差异.
小智 33
这两个命令基本上要求的是:
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
Run Code Online (Sandbox Code Playgroud)
它们之间的选择取决于dir1和dir2的位置:
当目录驻留在两个单独的驱动器上时,diff优于rsync.但是当比较的两个目录在同一个驱动器上时,rsync会更快.这是因为diff在两个目录上并行放置几乎相等的负载,从而最大化两个驱动器的负载.
rsync在实际比较它们之前计算大块中的校验和.它将i/o操作分组为大块,并在单个驱动器上进行更有效的处理.
频道同胞'账单'(freenode /#centos成名)与我分享他的方法:
diff -Naur dir1/ dir2
Run Code Online (Sandbox Code Playgroud)
包括最终目录正斜杠无关紧要.
此外,似乎该-u选项在某些较旧/服务器版本的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
Run Code Online (Sandbox Code Playgroud)
要查找差异,请使用以下命令:
diff -qr dir1/ dir2/
Run Code Online (Sandbox Code Playgroud)
-r也会比较所有子目录 -q告诉 diff 仅在文件不同时报告。
diff --brief dir1/ dir2/
Run Code Online (Sandbox Code Playgroud)
--brief将显示目录中存在的文件。
要不然
我们可以使用 Meld,它会在图形窗口中显示,很容易找到差异。
meld dir1/ dir2/
Run Code Online (Sandbox Code Playgroud)