diff
命令格式: diff [option] file1 file2
或 diff [option] dir1 dir2
作用: 比较两个文件的差异,linuxer 必学命令。
文件test.c
#include <vector>
using namespace std;
int main(int argc, char **argv)
{
printf("hello world\n");
vector<int> vec;
vec.push_back(1);
vector<int> vec2;
vec2.push_back(3);
vec.max_size();
return 0;
}
文件test.cpp
#include <vector>
using namespace std;
int main(int argc, char **argv)
{
printf();
vector<int> vec;
vec.push_back(1);
vector<int> vec2;
vec2.push_back(3);
printf("coding ...");
return 0;
}
1、 采用默认参数比较两个文件
命令: diff test.c test.cpp
6c6
< printf("hello world\n");
---
> printf();
11a12,13
>
> printf("coding ...");
13d14
< vec.max_size();
说明:
-
6c6
:test.c
和test.cpp
第六行内容有所不同。c
- change。 -
11a12,13
:test.cpp
比test.c
多了12,13行。a
- add。 -
13d14
:test.cpp
比test.c
少了 14行。d
- delete。
2、比较两个文件并排输出
命令: diff test.c test.cpp -y -W 80
*说明:
-
|
表示前后2个文件内容有不同 -
<
表示后面文件比前面文件少了1行内容 -
>
表示后面文件比前面文件多了1行内容
3、比较两个文件上下文输出
命令: diff test.c test.cpp -c
*** test.c 2016-11-26 22:38:50.480834192 +0800
--- test.cpp 2016-11-26 22:39:56.528831580 +0800
***************
*** 3,16 ****
int main(int argc, char **argv)
{
! printf("hello world\n");
vector<int> vec;
vec.push_back(1);
vector<int> vec2;
vec2.push_back(3);
- vec.max_size();
return 0;
}
--- 3,17 ----
int main(int argc, char **argv)
{
! printf();
vector<int> vec;
vec.push_back(1);
vector<int> vec2;
vec2.push_back(3);
+
+ printf("coding ...");
return 0;
}
说明:
-
+
比较的文件的后者比前着多一行 -
-
比较的文件的后者比前着少一行 -
!
比较的文件两者有差别的行
4、统一格式输出
命令: diff test.c test.cpp -u
--- test.c 2016-11-26 22:38:50.480834192 +0800
+++ test.cpp 2016-11-26 22:39:56.528831580 +0800
@@ -3,14 +3,15 @@
int main(int argc, char **argv)
{
- printf("hello world\n");
+ printf();
vector<int> vec;
vec.push_back(1);
vector<int> vec2;
vec2.push_back(3);
+
+ printf("coding ...");
- vec.max_size();
return 0;
}
说明:
它的第一部分,也是文件的基本信息:
--- test.c 2016-11-26 22:38:50.480834192 +0800
+++ test.cpp 2016-11-26 22:39:56.528831580 +0800
"---"表示变动前的文件,"+++"表示变动后的文件。
第二部分,变动的位置用两个@作为起首和结束。
@@ -3,14 +3,15 @@
前面的"-3,14"分成三个部分:减号表示第一个文件,"1"表示第1行,"14"表示连续14行。合在一起,就表示下面是第一个文件从第3行开始的连续14行。同样的,"+3,15"表示变动后,成为第二个文件从第3行开始的连续15行。
pacth
pacth 命令 和 diff 结合起来打补丁。
1、生成补丁
命令: diff -Naur test.c test.cpp > test.patch
查看补丁: cat test.patch
--- test.c 2016-11-26 22:38:50.480834192 +0800
+++ test.cpp 2016-11-26 22:39:56.528831580 +0800
@@ -3,14 +3,15 @@
int main(int argc, char **argv)
{
- printf("hello world\n");
+ printf();
vector<int> vec;
vec.push_back(1);
vector<int> vec2;
vec2.push_back(3);
+
+ printf("coding ...");
- vec.max_size();
return 0;
}
2、打补丁
命令: pacth -b < test.patch
查看效果: diff test.c test.cpp -y
3、撤销补丁
命令: patch -R < test.patch
查看效果: diff test.c test.cpp -y
上面演示的都是单文件,若是目录做法也是类似的。