《Linux diff與patch的深入分析》

2021-05-02 17:43:41 字數 3708 閱讀 6156

diff的輸出格式分為傳統格式和統一格式

1)diff的傳統格式輸出.

############################################

cat before.txt

輸出:this is a line to be deleted

this is a line that will be changed

this is a line that will be unchanged

cat after.txt

輸出:

this is a line that has been changed

this is a line that will be unchanged

this is a line that has been added

############################################

diff before.txt after.txt

輸 出:

1,2c1

< this is a line to be deleted

< this is a line that will be changed

---> this is a line that has been changed

3a3> this is a line that has been added

############################################

注釋:傳統格式的輸出

1,2c1是指替換第1個檔案的第1,2行到第2個檔案的第2行,這裡的1,2是指第1個檔案的第1,2行,c是替換的意思,最後的1是第2個檔案的第1行

《號是指第1個檔案更改或刪除的行

---號是分割兩個檔案

>號是第2個檔案中增加或刪除的行

3a3是指將第2個檔案的第3行插入到第乙個檔案的第3行

也就是說第1個檔案的:

< this is a line to be deleted

< this is a line that will be changed

被替換成第2個檔案的:

> this is a line that has been changed

由於第1個檔案的第3行和第2個檔案的第2行一致,所以不做修改.

由於第2個檔案的第3行是第1個檔案所不具有的,所以在第1個檔案的最後一行增加:

> this is a line that has been added

2)patch命令的應用

用diff的傳統格式輸出:

#################################

diff before.txt after.txt >mypatch.txt

#################################

用patch修補before.txt檔案,使before.txt和after.txt一致.

#################################

cat mypatch.txt |patch before.txt

輸出:patching file before.txt

#################################

比較兩個檔案,現在是一致的了.

#################################

cmp before.txt after.txt

#################################

用patch命令恢復before.txt.

#################################

patch -r before.txt old/two

echo "this is two. it changed.">new/two

echo "this is three. it's new" > new/three

##########################################

建立修補檔案

##########################################

diff -nur old/ new/ >mypatch.diff

##########################################

注:-r選項按照檔案目錄遞迴建立修補檔案.

-u還是統一模式

-n是指當diff遇到乙個只存在於兩個樹中的乙個樹中的檔案時,預設情況下跳過檔案並且列印乙個警告到stderr.

這個行為可以通過-n選項來更改,這也導致了diff認為丟失的檔案實際上是存在的,但它是空的.採用這種方式,

乙個修補檔案可以包括已經建立的檔案.然後應用修補程式建立新的檔案.

##########################################

more mypatch.diff

輸出:diff -nur old/three new/three

--- old/three   1970-01-01 08:00:00.000000000 +0800

+++ new/three   2009-06-20 06:55:34.000000000 +0800

@@ -0,0 +1 @@

+this is three. it's new

diff -nur old/two new/two

--- old/two     2009-06-20 06:55:08.000000000 +0800

+++ new/two     2009-06-20 06:55:21.000000000 +0800

@@ -1 +1 @@

-this is two. it will change.

+this is two. it changed.

##########################################

注釋:diff -nur old/three new/three是指下面比較old/three new/three兩個檔案.

因為沒有old/three檔案,所以在old/three中增加+this is three. it's new

diff -nur old/two new/two是指下面比較old/two new/two兩個檔案

因為old/two與new/two的第3行不一致,所以刪除this is two. it will change.增加this is two. it changed.

打補丁到old目錄,新建old/three以及更改old/two

##########################################

patch --dir old< mypatch.diff

ls -l     old/

輸出:one    three  two

##########################################

恢復old目錄的內容,包括刪除old/three,以及恢復old/two檔案

##########################################

patch --dir old -r >>>>>> you.c

}########################################

注釋:以上的格式,同cvs update,需要人工合併檔案的格式是一致的.

linux diff 命令詳解

首頁 講述 我與51cto不得不說的故事 部落格互動專題 之 2009,痛並快樂著的it人 2009 02 13 14 01 37 標籤 linux diff 命令 推送到技術圈 功能說明 比較檔案的差異。語 法 diff abbcdefhilnnppqrsttuvwy 行數 c 行數 d 巨集名稱...

Linux diff命令詳解

linux中比較檔案或者資料夾差異,經常用到diff命令,先解釋如下。用法 diff 選項 files 功能 逐行比較檔案。常用選項說明 i ignore case 忽略檔案內容大小寫的區別。ignore file name case 忽略檔名大小寫的區別。no ignore file name c...

linux diff具體解釋

diff是unix系統的乙個非常重要的工具程式。它用來比較兩個文字檔案的差異,是 版本號管理的基石之中的乙個。你在命令列下,輸入 diff 變動前的檔案 變動後的檔案 diff就會告訴你,這兩個檔案有何差異。它的顯示結果不太好懂,以下我就來說明,怎樣讀懂diff。一 diff的三種格式 因為歷史原因...