Linux
Diff 總是無法應用我製作的文件更新檔?
我的伺服器中有一些文件要為其打更新檔,所以我拿了其中一個文件進行測試:
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
刪除備份。