在比較檔案的時候,通常會用基於GUI的軟體。很少有人真正會為了這個目的使用命令列工具。雖然說使用命令列來比較檔案/目錄並不像一件小事兒那樣容易,但是如果你是一個Linux使用者,那麼我想你應該知道如何通過命令列比較檔案,因為一旦使用了它,你會認為它絕對是一個快速的方法。
在本篇中,我們將通過一些執行個體來學習如何使用diff命令。
Linux diff 命令
讓我們通過一些實際的例子理解diff命令。
假設我們有兩個檔案(file1 和 file2):
$ cat file1
Hi,
Hello,
How are you?
I am fine,
Thank you.
$ cat file2
Hello,
Hi,
How are you?
I am fine.
你可以看見兩個檔案有些小的不同。現在,讓我們看看diff命令如何找出兩者的不同的。
像這樣運行diff命令:
$ diff file1 file2
1d0
< Hi,
2a2
> Hi,
4,5c4
< I am fine,
< Thank you.
---
> I am fine.
你可以看見diff後面跟了兩個檔案的名字作為命令列的參數,並且它在輸出中產生了差異比較。輸出並不容易理解。理由是,這是被電腦使用的而不是為了人類。儘管如此,讓我們一步步解碼輸出:
注意 – 在下面的文本中,file1和file2將被當作舊檔案和新檔案。
1d0
< Hi,
這裡,1d0這一行意味著舊檔案的第一行應該被刪除(d)以使兩個檔案的第一行同步。舊檔案中需要被刪除的行以'<'標記。
2a2
> Hi,
這裡,2a2行意味著新檔案中的第二行應該加到舊檔案的第二行後。要添加的行顯示在輸出的下一行用'>'標記。
4,5c4
< I am fine,
< Thank you.
---
> I am fine.
這裡,4,5c4這一行意味著在舊檔案中的4到5行現在已被改變並且需要用新檔案中的第4行代替。添加和刪除的行分別用'>'和'<'表示。
那麼,來總結一下,
- 首先diff命令的第一個參數被視為舊檔案而第二個參數被視為新檔案。
- 像1d0、2a2、4,5c4這種運算式可以用文法解碼為 [舊檔案的行號或者行的範圍][行為][新檔案的行號或者行的範圍]。這裡的'行為'可以是追加,刪除或者改變替換。
- '<'代表刪除的行,而'>'代表添加的行。
除了檔案外,diff命令還可以比較兩個目錄。讓我們通過一個例子學習。
這裡是'new_dir'目錄包含的內容:
$ ls new_dir/
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt
這是'origdir'目錄含有的內容:(譯註:原文為and here are the contents of a directory named ‘olddir’ ,其中'old_dir'應為筆誤。)
$ ls orig_dir/
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt test
file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
下面是diff命令執行後的輸出:
$ diff new_dir/ orig_dir/
Only in new_dir/: file
Only in orig_dir/: test
你可以看到當diff命令被用來比較這兩個目錄時,很容易就會顯示兩個檔案中缺失的檔案。
更多詳情見請繼續閱讀下一頁的精彩內容:
Linux下使用diff和patch製作及打補丁
Linux diff命令參數及用法詳解---比較檔案的差異
Linux系統補丁工具patch AND diff