有沒有辦法替換符號連結的值?

有沒有辦法替換符號連結的值?

有沒有辦法替換符號連結的值?

例如,我想從此更改符號連結:

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

我只想更改foobar.

當然我可以再次創建一個鏈接,但是如果可以替換鏈接的值,那就變得更容易了。

答案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"

答案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用滑鼠遊標反白顯示。按下中間按鈕(如果只有兩個按鈕,則按兩個按鈕)。您不想再次輸入的長行將被貼到文字遊標處。

如果您不在 X 中,您可以透過安裝gpm.

相關內容