シンボリックリンクの向き先変更(ln -nfs TARGET LINK_NAME)

  • 79
    Like
  • 0
    Comment
More than 1 year has passed since last update.

シンボリックリンクの向き先を変えたいときって結構あるけど、単純にln -s TARGET LINK_NAMEってしたら怒られる("ln: target: File exists")。

そこで泣く泣くrm -f LINK_NAME && ln -s TARGET LINK_NAMEってしてたけど、便利な上書きオプション-fがあった。
あぁわかりやすくて便利、ln -fs TARGET LINK_NAME
(なんで今まであると思わなかったんだろう。。。)

[追記]
TARGETがディレクトリの時は、-nオプションも必要。
ln -fs TARGET LINK_NAMEだけだと、TARGETがディレクトリの時に意図通りにならない。

$ ls -l
TARGET1/
TARGET2/

$ ln -fs TARGET1 LINK_NAME  # 1回目は大丈夫
$ ls -l
LINK_NAME -> TARGET1/
TARGET1/
TARGET2/

$ ln -fs TARGET2 LINK_NAME  # 2回目は...
$ ls -l
LINK_NAME -> TARGET1/       # 向き先が変わっていない
TARGET1/
TARGET2/
$ ls -l LINK_NAME/
TARGET2 -> TARGET2          # なんと循環参照してしまっている 

これは-nオプションで回避できる。このオプションはずばり、LINK_NAMEがディレクトリを指すシンボリックリンクの場合、通常のファイルとして扱うというもの。

(続き)
$ ln -nfs TARGET2 LINK_NAME
$ ls -l
LINK_NAME -> TARGET2/       # ちゃんと向き先が変わっている
TARGET1/
TARGET2/

結論。シンボリックリンクの向き先を変えるときは、ln -nfs TARGET LINK_NAMEがオススメ。

参考 [man ln]