patch
給檔案1應用補丁檔案變成另外一個檔案2(需要先用"diff 檔案1 檔案2"產生補丁檔案)。
文法
patch [選項] [原始檔案 [補丁檔案]]
描述:
patch 命令讀取如何變更檔的源檔案指示資訊,然後應用這些更改。源檔案包含由 diff 命令產生的差別列表(或者 diff 列表)。差異列表是比較兩個檔案和構建關於如何糾正差別的指示資訊的結果。預設情況下,patch 命令使用從標準輸入讀入的源檔案,但是使用 -i 標誌和 PatchFile 變數可以覆蓋此設定。
差異列表有三種格式:正常、上下文或者是 ed 編輯器風格。patch 命令確定差異列表格式,除非被 -c、-e 或 -n 標誌否決。
預設情況下,檔案的打過補丁的版本替換原始版本。指定 -b 標誌時,每個補丁檔案的原檔案儲存在同名的檔案中,只是在檔案名稱後附加了尾碼 .orig。使用 -o 標誌也可以指定輸出的目的地。
常用選項:
-r 是一個遞迴選項,設定了這個選項,diff會將兩個不同版本原始碼目錄中的所有對應檔案全部都進行一次比較,包括子目錄檔案。
-N 選項確保補丁檔案將正確地處理已經建立或刪除檔案的情況。
-u 選項以統一格式建立補丁檔案,這種格式比預設格式更緊湊些。
-p0 選項從目前的目錄尋找目的檔案(夾)(直接使用補丁檔案裡面指定的路徑)
-p1 選項忽略掉第一層目錄,從目前的目錄尋找(去掉補丁檔案指定路徑最左的第1個'/'及前面所有內容)。
-E 選項說明如果發現了空檔案,那麼就刪除它
-R 選項說明在補丁檔案中的“新”檔案和“舊”檔案現在要調換過來了(實際上就是給新版本打補丁,讓它變成老版本)
舉例:
**單個檔案的:
首先將兩個檔案的內容顯示如下:
$ cat test0
00000000
00000000
00000000
$ cat test1
00000000
11111111
00000000
*產生補丁:
$ diff -uN test0 test1 >test1.patch
這樣將通過比較,產生test1的補丁檔案。這裡選項u表示使用同一格式輸出這樣產生的輸出便於閱讀易於修改,N表示把不存在的檔案看做empty的.就算檔案test0不存在,也會產生補丁。
*把test0通過打補丁變成test1檔案:
$ patch -p0 prj1.patch
這裡選項u表示使用同一格式輸出這樣產生的輸出便於閱讀易於修改,N表示把不存在的檔案看做empty的,r表示遞迴地比較子目錄,比較的結果被標準重新導向到檔案prj1.patch中了。
運行之後,輸出的就是一個補丁,描述了兩個檔案的不同,這個補丁就是把diff參數的第一個檔案打補丁變成第二個檔案的補丁檔案。
實際過程依次比較兩個目錄下的同名檔案,如果這裡不加-N就會指明prj0name和test0隻在prj0中存在,prj1name和test1隻在prj1中存在,這就無法比較了,所以這裡為了能夠比較,加上了-N選項。
為了便於理解,這裡給出prj1.patch檔案的內容:
$ cat prj1.patch
diff -uNr prj0/prj0name prj1/prj0name
--- prj0/prj0name 2009-08-24 10:44:19.000000000 +0800
+++ prj1/prj0name 1970-01-01 08:00:00.000000000 +0800
@@ -1,5 +0,0 @@
---------
-
-prj0/prj0name
-
---------
diff -uNr prj0/prj1name prj1/prj1name
--- prj0/prj1name 1970-01-01 08:00:00.000000000 +0800
+++ prj1/prj1name 2009-08-24 10:45:05.000000000 +0800
@@ -0,0 +1,5 @@
+---------
+
+prj1/prj1name
+
+---------
diff -uNr prj0/test0 prj1/test0
--- prj0/test0 2009-08-24 11:21:12.000000000 +0800
+++ prj1/test0 1970-01-01 08:00:00.000000000 +0800
@@ -1,7 +0,0 @@
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
diff -uNr prj0/test1 prj1/test1
--- prj0/test1 1970-01-01 08:00:00.000000000 +0800
+++ prj1/test1 2009-08-24 11:21:33.000000000 +0800
@@ -0,0 +1,7 @@
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
*將prj0中的所有檔案打補丁成為prj1中的所有檔案:
步驟如下:
1)$ cp prj1.patch ./prj0
2)$ cd prj0
3)$ patch -p1
上一篇:gzip(未摘抄)
下一篇:sort(未摘抄)