Есть ли способ заменить значение символической ссылки?

Есть ли способ заменить значение символической ссылки?

Есть ли способ заменить значение символической ссылки?

Например, я хочу изменить символическую ссылку с этой:

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, для того, чтобы удалить существующую символическую ссылку перед созданием новой. Если местом назначения является каталог, вам нужно добавить опцию , для того, чтобы указать , что символическую ссылку следует рассматривать как обычный файл.--forceln-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курсором мыши. Нажмите среднюю кнопку (или обе кнопки, если у вас их всего две). Длинная строка, которую вы не хотели вводить снова, будет вставлена ​​в текстовый курсор.

Если вы не в X, вы можете сделать то же самое, установив gpm.

Связанный контент