檔案/目錄對比:diff命令
阿新 • • 發佈:2020-08-09
命令格式
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