Заменить символическую ссылку, которая связана с целью каталога

17

Я хочу обновить сервер Tomcat с 7.0.19 до 7.0.20.

Я уже делал это ln -s apache-tomcat-7.0.19 tomcat7раньше, поэтому теперь мне нужно связать tomcat7 новую цель с помощью следующей команды ln -s --force apache-tomcat-7.0.21 tomcat7, но она не работает так, как я ожидал: она создала символическую ссылку tomcat7/apache-tomcat-7.0.21вместо замены существующей tomcat7символической ссылки новой целью.

пример

# mkdir v1 v2
# ln -s v1 v
# ln -s v2 v
# ll v*
lrwxrwxrwx. 1 root root    2 Sep  5 16:02 v -> v1

v1:
total 0
lrwxrwxrwx. 1 root root 2 Sep  5 16:02 v2 -> v2

v2:
total 0

Я проверил руководствоln , я думаю, ln -s --force apache-tomcat-7.0.21 tomcat7использовать 3-ю форму вместо 1-й формы, чтобы объяснить параметры. Это так неоднозначно между 1-й и 3-й формой. Так как же заменить символическую ссылку в этом случае?

LiuYan 刘 研
источник

Ответы:

16

Вы хотите -Tвариант:

$ mkdir v1
$ ln -s v1 foo
$ ls -FlA | grep foo
lrwxrwxrwx 1 phil phil     2 2011-09-05 01:58 foo -> v1/
$ mkdir v2
$ ln -s -T -f v2 foo
$ ls -FlA | grep foo
lrwxrwxrwx 1 phil phil     2 2011-09-05 01:59 foo -> v2/
PHS
источник
Спасибо, это именно то, что мне было нужно. Какой позор, я вижу эту дополнительную опцию в помощи, но я не знаю , что это именно так.
LiuYan 研 研
16

При замене символических ссылок на каталоги мы должны использовать -nопцию.

Пример: ln -sfn /path/to/directory /target/directory

Сурья Прабхакар
источник
1
Это должен быть принятый ответ. Решает вопрос и однострочно / компактно.
до
1
Принятый ответ также решает вопрос и является одним вкладышем ... если я не ошибаюсь, он может быть одинаково компактным. Я не думаю, что нужно иметь отдельный -и пробел перед каждым флагом, как у них.
ArtOfWarfare
3

Почему не просто

rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7

?

Это не коснется старого каталога apache-tomcat-7.0.19, а просто удалит старую ссылку. Тогда я могу создать новый.

fschmitt
источник
Благодарность! Я сделал это в настоящее время в моем сценарии, но я думаю, что это не похоже на cp -f/ mv -fкоторые используют одну команду для выполнения операции перезаписи, поэтому я ищу решение для одной команды .
LiuYan 研 研