命令格式
diff [參數] [文件1或目錄1] [文件2或目錄2]
Linux diff命令用於比較文件的差異。
- diff以逐行的方式,比較文本文件的異同處。
- 如果指定要比較目錄,diff會比較目錄中相同文件名的文件,但不會比較其中子目錄。
- diff程序的輸出被稱為補丁(patch),Linux系統中還有一個patch程序,可以根據diff的輸出將a.c的文件內容更新為b.c
- 打補丁:patch file patch.log
命令參數
參數 | 描述 |
---|---|
-行數 | 指定要顯示多少行的文本。此參數必須與-c或者-c參數一並使用。 |
-a | 或者--text,diff預設只會逐行比較文本文件 |
-b | 或--ignore-space-change ,不檢查空格字符的不同。 |
-B | 或--ignore-blank-lines ,不檢查空白行。 |
-c | 顯示全部內容,並標出不同之處 |
-C行數 | 或--context行數 與執行"-c-行數"指令相同。 |
-i | 或--ignore-case ,不檢查大小寫的不同。 |
-p | 若比較的文件為C語言的程序碼文件時,顯示差異所在的函數名稱 |
-N | 或--new-file ,在比較目錄時,若文件A僅出現在某個目錄中,預設會顯示:Only in目錄:文件A若使用-N參數,則diff會將文件A與一個空白的文件比較。 |
-P | 或--unidirectional-new-file ,與-N類似,但只有當第二個目錄包含了一個第一個目錄所沒有的文件時,才會將這個文件與空白的文件做比較。 |
-r | 比較子目錄中的文件 |
-v | 顯示版本信息 |
-w | 或--ignore-all-space , 忽略全部的空格字符。 |
-W | 或--width , 在使用-y參數時,指定欄寬。 |
-x | 或--exclude , 不比較選項中所指定的文件或目錄。 |
-X | 或--exclude-from , 您可以將文件或目錄類型存成文本文件,然后在=中指定此文本文件。 |
-y | 或--side-by-side ,以並列的方式顯示文件的異同之處。 |
--left-column | 在使用-y參數時,若兩個文件某一行內容相同,則僅在左側的欄位顯示該行內容。 |
--suppress-common-lines | 在使用-y參數時,僅顯示不同之處。 |
具體使用
默認格式的diff:diff file1 file2
2c2
< world
---
> world2
3a4
> hell
5d5
< river
- 它分成三個部分:前面的"4",表示f1的第4行有變化;中間的"c"表示變動的模式是內容改變(change),其他模式還有"增加"(a,代表addition)和"刪除"(d,代表deletion);后面的"4",表示變動后變成f2的第4行。
- c:change,內容改變
- a:addition,增加
- d:deletion,刪除
- ---用於分割f1和f2
上下文格式的diff:diff file1 file2 -c
-> autotest-runtask diff 1.txt 2.txt -c
*** 1.txt 2020-08-09 18:09:24.000000000 +0800
--- 2.txt 2020-08-09 18:09:10.000000000 +0800
***************
*** 1,5 ****
hello
! world
goodbye
moutain
- river
--- 1,5 ----
hello
! world2
goodbye
+ hell
moutain
結果分成四部分:
- 第一部分的兩行,顯示兩個文件的基本情況:文件名和時間信息
- *** 表示變動前的文件
- --- 表示變動后的文件
- 第二部分:15個星號,將文件的基本情況和變動內容分割開
- 第三部分:顯示變動前的文件
- 1,5,表示行號
- 文件內容的每一行最前面,還有一個標記位:
- 空:無變化;
- !:該行有改動;
- -:該行被刪除;
- +:該行新增
- 第四部分:顯示變動后的文件
合並格式的diff:diff file1 file2 -u
➜ autotest-runtask diff 1.txt 2.txt -u
--- 1.txt 2020-08-09 18:09:24.000000000 +0800
+++ 2.txt 2020-08-09 18:09:10.000000000 +0800
@@ -1,5 +1,5 @@
hello
-world
+world2
goodbye
+hell
moutain
-river
- 第一部分:文件基本信息
- 第二部分:變動的部分用兩個@@作為起首和結束
- -:表示第一個文件;+表示第二個文件
- 第三部分:變動的具體內容
並排格式的diff:diff file1 file2 -y
➜ autotest-runtask diff 1.txt 2.txt -y
hello hello
world | world2
goodbye goodbye
> hell
moutain moutain
river <
-
|:表示前后2個文件內容有不同
-
<:表示前面文件比后面文件多了1行內容
-
>:表示前面文件比后面文件少了一行內容
比較目錄:diff 目錄1 目錄2
- 只顯示不同行:
diff -r 目錄1 目錄2 -y --suppress-common-lines