日付別に構成(名前指定)された他のディレクトリを含む特定のディレクトリがあります。簡単に参照できるように、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
思った通りにはなりませんね。
〜しなければならない私rm current
、それとも私が見落としている別の方法はありますか?
答え1
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との互換性のためにのみサポートできます。。
このフラグは同じ場所にリダイレクトするためにも必要です-f
。