替换链接到目录目标的符号链接


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使用第三种形式代替第一种形式来解释参数。第一种和第三种形式是如此模棱两可。那么在这种情况下如何替换符号链接呢?

Answers:


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/

谢谢,这正是我所需要的。真可惜,我在帮助中看到了这个可选选项,但我不知道它的确切作用。
刘岩刘研

16

在替换目录的符号链接时,我们应该使用-noption。

例: 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,而只是删除旧链接。然后ln可以创建新的。


谢谢!我目前是在脚本中执行此操作的,但我认为它与cp -f/不一样mv -f,它使用单个命令进行覆盖操作,因此我正在寻找单个命令解决方案
刘岩刘研
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.