シンボリックリンクの作成を強制するには?


10

日付で整理された(名前付きの)他のディレクトリでいっぱいの特定のディレクトリがあります。参照しやすいcurrentように、最新のものを指すというシンボリックリンクがあります。

新しい日付ディレクトリを作成するスクリプトで、currentシンボリックリンクを作成または修正して、作成された最新のディレクトリを指すようにします。

適切なコマンドは、たとえば、

ln -fs 2017-03-01 current

場合はcurrentシンボリックリンクがまだ存在していない、この作品。


ただし、currentシンボリックリンクがすでに作成されている場合(および、たとえば、ディレクトリを指している場合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

説明

...

2番目の構文形式は、最後のオペランドが既存のディレクトリを指定するときに想定されます。


する全く方法がないこと、そして、思わシンボリックリンクを再指定現在のディレクトリを指していることを新たなターゲットに新しいターゲットは名前の持つ別のシンボリックリンクの名前からは。だからln -fs私が思ったようには動かない。

必要があります I rm current、またはそこには、私が見落としてきた別のアプローチですか?

回答:


17

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との互換性のために

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.