![Есть ли способ заменить значение символической ссылки?](https://rvso.com/image/50577/%D0%95%D1%81%D1%82%D1%8C%20%D0%BB%D0%B8%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%3F%20.png)
Есть ли способ заменить значение символической ссылки?
Например, я хочу изменить символическую ссылку с этой:
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"
решение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
.