linux上的diff命令可以比较文件、目录,是svn、cvs、git等版本控制工具不可或缺的一部分。
diff [参数] 文件1|目录1 文件2或目录2
1、参数:
可以通过--help查看所有参数,这里举一些常用的:
- -y, --side-by-side output in two columns
- -W, --width=NUM output at most NUM (default 130) print columns
- -c, -C NUM, --context[=NUM] output NUM (default 3) lines of copied context
- -u, -U NUM, --unified[=NUM] output NUM (default 3) lines of unified context
2、输出:
diff 的normal 显示格式有三种提示:
- a - add
- c - change
- d - delete
此外,在两列显示中还有三种符号表示:
- “|”表示前后2个文件内容有不同
- “<”表示后面文件比前面文件少了1行内容
- “>”表示后面文件比前面文件多了1行内容
3、示例:
先看两个文件:file1、file2
2013-01 2013-01
2013-02 2013-02
2013-03 2014-03
2013-04 2013-04
2013-05 2013-05
2013-06 2013-06
2013-07 2013-07
2013-08 2013-07
2013-09 2013-09
2013-10 2013-10
2013-11
2013-12
1)normal模式输出:diff file1 file2
$ diff file1 file2
3c3
< 2013-03
---
> 2014-03
8c8
< 2013-08
---
> 2013-07
10a11,12
> 2013-11
> 2013-12
说明:上面的“3c3”和“8c8”表示file1和file2文件在3行和第8行内容有所不同;"11,12d10"表示第一个文件比第二个文件多了第11和12行。
2)并排输出:diff file1 file2 -y -W50
$ diff file1 file2 -y -W50
2013-01 2013-01
2013-02 2013-02
2013-03 | 2014-03
2013-04 2013-04
2013-05 2013-05
2013-06 2013-06
2013-07 2013-07
2013-08 | 2013-07
2013-09 2013-09
2013-10 2013-10
> 2013-11
> 2013-12
说明:“|”表示前后2个文件内容有不同;“<”表示后面文件比前面文件少了1行内容;“>”表示后面文件比前面文件多了1行内容。
3)上下文输出:diff file1 file2 -c
$ diff file1 file2 -c
*** file1 2020-06-24 19:58:16.529093001 +0800
--- file2 2020-06-24 19:58:39.430280167 +0800
***************
*** 1,10 ****
2013-01
2013-02
! 2013-03
2013-04
2013-05
2013-06
2013-07
! 2013-08
2013-09
2013-10
--- 1,12 ----
2013-01
2013-02
! 2014-03
2013-04
2013-05
2013-06
2013-07
! 2013-07
2013-09
2013-10
+ 2013-11
+ 2013-12
说明:“+”比较的文件的后者比前着多一行;“-”比较的文件的后者比前着少一行;“!”比较的文件两者有差别的行、
4)统一格式输出:diff file1 file2 -u
$ diff file1 file2 -u
--- file1 2020-06-24 19:58:16.529093001 +0800
+++ file2 2020-06-24 19:58:39.430280167 +0800
@@ -1,10 +1,12 @@
2013-01
2013-02
-2013-03
+2014-03
2013-04
2013-05
2013-06
2013-07
-2013-08
+2013-07
2013-09
2013-10
+2013-11
+2013-12