シンボリックリンクの値を置き換える方法はありますか?

シンボリックリンクの値を置き換える方法はありますか?

シンボリックリンクの値を置き換える方法はありますか?

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

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"

答え2

second -> /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again

X 内で実行している場合:

stat second

リンクとその他の情報を印刷します。 と入力しln -s/home/username/bar/very/long/directories/that/I/do/not/want/to/type/againマウス カーソルでハイライトします。中央のボタン (ボタンが 2 つしかない場合は両方のボタン) を押します。再度入力したくない長い行は、テキスト カーソルの位置に貼り付けられます。

X を使用していない場合は、 をインストールすることで同じことを行うことができますgpm

関連情報