Symlink

如何強制創建符號連結?

  • March 2, 2017

我有一個特定的目錄,其中包含按日期組織(命名)的其他目錄。為了便於參考,我有一個符號連結,稱為current指向最新的符號連結。

在創建新日期目錄的腳本中,我希望創建或修復current符號連結以指向創建後的最新目錄。

我認為適當的命令只是,例如,

ln -fs 2017-03-01 current

如果current符號連結尚不存在,則此方法有效。


但是,如果current符號連結已經創建(並且指向,讓我們說,在 directory 2017-02-28),這不起作用:

不是刪除符號連結current並創建一個current指向的新符號連結2017-03-01,結果將是一個損壞的符號連結,稱為 2017-03-01指向**自身,*位於目錄內(*2017-02-28符號連結current指向並仍然指向的位置)。

這讓我很困惑,所以我閱讀了ln. 原來這是預期的行為:

概要

ln [-fs] [-L|-P] source_file target_file

ln [-fs] [-L|-P] source_file... target_dir

描述

當最終操作數命名現有目錄時,應採用第二種概要形式。


那麼,似乎沒有辦法將目前指向目錄的符號連結重新指向**新目標,其中新目標的名稱與符號連結的名稱不同。所以ln -fs不像我想像的那樣工作。

必須rm current,還是我忽略了另一種方法?

在 GNU 中ln,有ln -n,這將允許重新指向一個符號連結:

$ mkdir dir1 dir2
$ ln -s dir1 sym
# dir1/
# dir2/
# sym -> dir1/

$ ln -nsf dir2 sym
# dir1/
# dir2/
# sym -> dir2/

BSD coreutils 使用該標誌-h的方式與使用該標誌的方式相同-n但二進製文件可能-n僅支持與 GNU 兼容

引用自:https://unix.stackexchange.com/questions/348536