cp -f 與 cp --remove-destination 有什麼不同?

cp -f 與 cp --remove-destination 有什麼不同?

在 cp 線上說明頁中,它將 -f/--force 選項列出為:如果無法開啟現有目標文件,請將其刪除並重試

對於 --remove-destination 選項,它表示:在嘗試開啟每個現有目標檔案之前刪除它(與 --force 比較)

因此,前者首先檢查是否可以打開,如果不能打開,則無論如何都會刪除,而後者只是繞過該步驟。我將每個選項與 -i 選項結合起來,在這兩種情況下,它都指示檔案被寫入保護時的權限。

後者似乎更有效,特別是在遞歸複製/覆蓋大型目錄的情況下,但為什麼要保留這兩個選項?檢查它無論如何都會覆蓋的東西有什麼好處?

答案1

兩者之間有區別(強調我的):

如果無法開啟現有目標文件,請將其刪除,然後再次嘗試
刪除每個現有目標文件在嘗試打開它之前

在第一種情況下,如果文件可以打開,cp將嘗試僅替換內容。cp不會不必要地刪除該檔案。這將保留原始檔案的權限和所有權,除非您指定也要複製它們。

第二種情況在內容無法讀取時很有用(例如懸空符號連結)。

答案2

並且:如果目標檔案有多個連結(硬連結),--remove-destination 不會破壞其他連結的內容。相反,只是刪除目標的連結(現在我們知道,為什麼「刪除」在更深層的系統函數中被稱為「取消連結」),並創建一個具有新索引節點的新檔案。

相關內容