シンボリックリンクの向き先を変えたいときって結構あるけど、単純に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]