Symlink
cp 命令在目的地和clobbers 連結目標處遵循符號連結,而不是覆蓋連結
我有一個符號連結,
sd/common.py -> actual_file
我想用生成的文件替換連結。然而,每當我這樣做
cp /tmp/Star_Wrangler/common.py sd/common.py
…它複製
/tmp/Star_Wrangler/common.py
並覆蓋了,actual_file
而不是像我想要的那樣替換符號連結。每次我忘記在複製之前刪除符號連結時,這種情況都會不斷發生。是否可以選擇獲得我期望的行為?我查看了手冊,但它們都在源處而不是目標處談論符號連結。
這取決於您使用的是什麼 Unix。
在某些 BSD 系統(OpenBSD、FreeBSD)上,您會發現
cp -f
將取消連結(刪除)符號連結並將其替換為原始碼。使用 GNU
cp
,這不會產生相同的效果,您需要使用 long 選項--remove-destination
。在 macOS
cp -c
上,如手冊所述,用於“使用”複製文件clonefile(2)
。在 NetBSD 上,使用
cp -a
(“歸檔模式”,與cp -RpP
該系統上相同)。這在 GNU、macOS、OpenBSD 或 FreeBSD 上不起作用,即使所有這些系統都有相同或相似的-a
選項cp
(在 GNU 系統上,它與 相同-dR --preserve
)。您自己已經提到了這一點:在復製文件之前刪除連結將解決問題。該
rm
實用程序刪除連結而不是連結引用的文件。這也是用正常文件替換符號連結的最便攜方式。如果您正在編寫腳本,那麼我建議您使用
rm
後跟cp
.如果您正在互動工作並且一直忘記這樣做,那麼您也很可能忘記在
cp
這些情況下使用特定選項。