シンボリックリンクの値を変更する方法はありますか? [コピー]

シンボリックリンクの値を変更する方法はありますか? [コピー]

シンボリックリンクの値を変更する方法はありますか?

たとえば、シンボリックリンクを次のように変更したいとします。

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-dereferenceln

ln -sfn target existing_link

ただし、これはアトミックでも以前​​の以前のシンボリックリンクも呼び出さないため、ln技術的にリンク値を変更するとは見なされません。これらの区別に興味があれば、答えは「いいえ」です。既存のシンボリックリンクの値を変更することはできません。unlink()symlink()

つまり、次のようにして新しいシンボリックリンクを作成し、古いリンク値の一部を変更できます。

  ln -sfn "$(readlink existing_link | sed s/foo/bar/)" "existing_symlink"

おすすめ記事