シンボリックリンクの値を変更する方法はありますか?
たとえば、シンボリックリンクを次のように変更したいとします。
first -> /home/username/foo/very/long/directories/that/I/do/not/want/to/type/again
これに関して:
second -> /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again
foo
ただに変更したいbar
。
もちろん、リンクを再作成することもできますが、リンクの値を変更できる場合は簡単になります。
ベストアンサー1
-f
、--force
オプションを使用して、ln
新しいシンボリックリンクを作成する前に既存のシンボリックリンクを削除することができます。ターゲットがディレクトリの場合は、シンボリックリンクを通常のファイルとして処理するように指示するオプションを-n
追加する必要があります。--no-dereference
ln
ln -sfn target existing_link
ただし、これはアトミックでも以前の以前のシンボリックリンクも呼び出さないため、ln
技術的にリンク値を変更するとは見なされません。これらの区別に興味があれば、答えは「いいえ」です。既存のシンボリックリンクの値を変更することはできません。unlink()
symlink()
つまり、次のようにして新しいシンボリックリンクを作成し、古いリンク値の一部を変更できます。
ln -sfn "$(readlink existing_link | sed s/foo/bar/)" "existing_symlink"