古いシンボリックリンクを別の場所に直接リンクする

古いシンボリックリンクを別の場所に直接リンクする

例:

次のコマンドを使用して、/usr/local/binフォルダへのシンボリックリンクを作成しました。

sudo ln -s ~/Desktop/package/Application/tool1
sudo ln -s ~/Desktop/package/Application/tool2

私のアプリケーションフォルダ(およびすべての対応するツール)を/ package / Application(デフォルトではUsers親ディレクトリの外部)に移動したいと思います。元のシンボリックリンクが新しい場所の対応するツールを指すことは可能ですか?

答え1

習慣。シンボリックリンクは引き続き同じ場所を指していますぶら下がっているシンボリックリンク。新しい場所を指すようにするには、その項目を削除して正しく再生成するか、二重間接指定を実行できます。ツールの現在の場所から新しい場所にシンボリックリンクを作成すると、/usr/local/binのシンボリックリンクは(ただし今回は間接的ですが)正しい場所を指します。

答え2

使用しているファイルシステムがサポートしている場合再接続参照リンクの使用を検討できます。だから代わりに:

ln -s oldloc/foo tools/bar
mv oldloc newloc
# oh dear broken link

使用:

cp --reflink=always oldloc/foo tools/bar
# oldloc/foo and tools/bar point to the same disk extents
mv oldloc newloc
# newloc is just a rename so oldloc/foo and tools/bar still point to the same disk extents

まだいくつかの注意があります。 "foo"の新しいバージョンをインストールすると、ツール/バーは更新されません。

これは、ほとんどのリンクを使用する際の主な問題です。また、この再リンクはディレクトリでは機能しません。

ハードリンクの使用を検討することもできます。ハードリンクは常に同じファイル(または同じプライマリディスクの場所)を指します。

関連情報