参考:https://www.runoob.com/linux/linux-comm-diff.html

diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。

先创建两个简单的文本:

  1. $ cat test1
  2. a1
  3. a2
  4. a3
  5. a4
  6. a5
  7. a6
  8. a7
  9. a8
  10. a9
  11. a10
  12. $ cat test2
  13. a1
  14. a2
  15. a3
  16. a5
  17. a6
  18. a7
  19. a8
  20. a9
  21. a10
  22. a11
  23. a12

先不管参数,直接运行diff:

$ diff test1 test2
4d3
< a4
10a10,11
> a11
> a12

上面的4d3 表示test1 的第四行不存在test2 中。
其中test1 文件中第四行信息为a4。
10a10,11 表示test2 的第十行、十一行不存在test1 中。
其中test2 文件中第十行、十一行信息为a11、a12。
ps:感觉规律是,xdy,表示左边文件x 行多出。xay,则表示右边文件多出y 行。

我们可以使用-c 参数标记全文:

$ diff -c test1 test2
*** test1    2021-03-06 15:36:06.000000000 +0800
--- test2    2021-03-06 15:38:01.000000000 +0800
***************
*** 1,10 ****
  a1
  a2
  a3
- a4
  a5
  a6
  a7
  a8
  a9
  a10
--- 1,11 ----
  a1
  a2
  a3
  a5
  a6
  a7
  a8
  a9
  a10
+ a11
+ a12

还可以让它们并列比较:

$ diff -y test1 test2
a1                                a1
a2                                a2
a3                                a3
a4                                  <
a5                                a5
a6                                a6
a7                                a7
a8                                a8
a9                                a9
a10                                a10
                                  >    a11
                                  >    a12

"|"表示前后2个文件内容有不同
"<"表示后面文件比前面文件少了1行内容
">"表示后面文件比前面文件多了1行内容

如果只想看看有没有差别,可以直接用参数-p:

diff -q test1 test2
Files test1 and test2 differ

如果想要比较目录,默认下目录下的文件需要名字相同:

diff dir1 dir2
Only in dir1: a
Only in dir2: b

常用参数

-q或--brief  仅显示有无差异,不显示详细的信息。
-c  显示全部内文,并标出不同之处。
-y或--side-by-side  以并列的方式显示文件的异同之处。
-B或--ignore-blank-lines  不检查空白行。
-r或--recursive  比较子目录中的文件。
-w或--ignore-all-space  忽略全部的空格字符。

"|"表示前后2个文件内容有不同
"<"表示后面文件比前面文件少了1行内容
">"表示后面文件比前面文件多了1行内容