我们通过下面这个例子来说明diff命令的简单用法。
文件准备
-
old.txt
111
222
333
444
555
666
777
888
999
000 -
new.txt
111
1.5
222
2.5
2.6
333
444
555
888
909
000
1. Normal
$ diff old.txt new.txt
输出说明
- a (add)
1a2 在old第1行之后加入了new的第2行
2a4,5在old第2行之后加入了new的第4,5行
- c (change)
9c10old中第9行修改为new第10行
<表示old文件中的内容
>表示new文件中的内容
- d (delete)
6,7d8old第6、第7行原本在new第8行之后
2. 并排输出
$ diff old.txt new.txt -y -W 50
参数说明
- -y 并排输出
- -W NUM 输出列数
输出说明
- “|” 表示前后2个文件内容有不同
- “<”表示后面文件比前面文件少了1行内容
- “>”表示后面文件比前面文件多了1行内容
3. 上下文输出
$ diff old.txt new.txt -c
参数说明
- -c NUM
Output NUM (default 3) lines of copied context.
输出说明
- “+” 比较的文件的后者比前着多一行
- “-” 比较的文件的后者比前着少一行
- “!” 比较的文件两者有差别的行
4. 统一格式输出
$ diff old.txt new.txt -u
输出说明
- "---" 表示变动前的文件
- "+++" 表示变动后的文件
- @@ -1,10 +1,11 @@ 变动位置
'-'表示old.txt
'+'表示new.txt
'-1,10' old.txt的前10行
'+1,10' new.txt的前11行
5. 比较文件夹不同
$ diff path1 path2
PS : 给目录打补丁会发生覆盖
6. 比较文件不同,产生补丁
$ diff -ruN old.txt new.txt > log.patch
$ cat log.patch
7. 打补丁
$ patch -p0 < log.patch
patching file old.txt
- -pNUM
去掉默认路径中的NUM个‘/
8. 恢复
如果恢复打补丁之前的文件
$ patch -RE -p0 < log.patch
网友评论
patch命令的选项我记不住了(需要手动加载特定补丁的场合很难遇到吧)