ディレクトリターゲットにリンクしたシンボリックリンクを置き換えます


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、パラメーターの説明には、1番目の形式ではなく3番目の形式を使用すると思います。それは、1番目と3番目の形式の間でとてもあいまいです。それでは、この場合のシンボリックリンクを置き換える方法は?

回答:


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/

おかげで、まさにそれが私が必要としていたものです。残念なことに、このオプションオプションがヘルプに表示されますが、正確に何をするのかわかりません。
LiuYan刘研

16

ディレクトリへのシンボリックリンクを置き換えるとき、-noption を使用する必要があります。

例: ln -sfn /path/to/directory /target/directory


1
これは受け入れられた答えでなければなりません。質問とワンライナー/コンパクトを解決します。
まで

1
受け入れられた答えも質問を解決し、1つのライナーです...私が間違っていない限り、それは同様にコンパクトにすることができます。私は-、彼らが持っているようなすべての旗の前に別個のスペースを持っている必要はないと思います。
ArtOfWarfare

3

どうして

rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7

これは、古いディレクトリapache-tomcat-7.0.19には影響しませんが、古いリンクを削除するだけです。その後、lnは新しいものを作成できます。


ありがとう!私は現在スクリプトでこれを行っていますが、単一のコマンドを使用して上書き操作を行うcp -f/ とは異なると思うmv -fので、単一のコマンドソリューションを探しています
LiuYan刘研
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.