Linux

Diff 總是無法應用我製作的文件更新檔?

  • November 1, 2010

我的伺服器中有一些文件要為其打更新檔,所以我拿了其中一個文件進行測試:

cp /path/file ~/file

所以現在我的根目錄中有相同的文件,所以我對 ~/file 的文件進行了我需要的任何更改,現在我對 2 個文件執行 diff 命令:

diff -Nuar /path/file ~/file > my_file.patch

我也試過:

diff -u /path/file ~/file > my_file.patch
diff -c /path/file ~/file > my_file.patch
diff /path/file ~/file > my_file.patch

現在您可以看到,除了我剛剛更改的內容之外,文件沒有任何區別,而是創建一個 my_file.patch 只使用程式碼來修補我對 /path/file 所做的更改,它總是創建一個完整的文件/path/file 的所有內容都標記為要刪除,而 ~/file 的內容則標記為要添加。

然後我嘗試應用更新檔:

patch -p0 < ~/my_file.patch

而且它失敗了……它總是列印出一個包含所有內容的拒絕文件,就像文件一樣。

對於為什麼它一直這樣做,我已經沒有想法了,使用一些文件我可以毫無問題地生成一個更新檔,但是對於我需要製作的系統上的大多數文件,它根本不起作用。

關於可能是什麼問題的任何想法?編碼,格式?解決方案?

是否有可能某些文件具有 Windows (DOS) 行結尾而不是 Unix 換行符?dos2unix在執行diff.

dos2unix和(在我的系統上,前者是後者的符號連結)都fromdos接受命令行上的文件名並就地進行轉換。您可以使用該-b選項進行備份。如果您在各個目錄中有很多這些文件,您可以使用find它們來處理它們。

find /dir/to/start -type f -name "foo*" -exec fromdos -b {} +

然後,當您對一切順利時感到滿意:

find /dir/to/start -type f -name "foo*.bak"  -delete

刪除備份。

引用自:https://serverfault.com/questions/196945