回答:
それは私のために働いています、出力はstrace ln -f -s /var/www/html/releases/build1390 app-current
何ですか?
ああ、それはあなたが-n
逆参照なしに追加する必要があるディレクトリであり、これは問題を解決するはずです。-f
とにかく-fを追加するとリンクが解除されるだけなので、本当に便利です。おそらく、通常の負荷のシステムでは数百ミリ秒速くなると思います。
たとえば、arfがすでに/ homeを指している場合:
strace With -n
:
strace ln -n -f -s / arf
...
symlink("/", "arf") = -1 EEXIST (File exists)
unlink("arf") = 0
symlink("/", "arf") = 0
straceなし-n
:
strace ln -f -s / arf
...
write(2, "ln: "..., 4ln: ) = 4
write(2, "`arf/': cannot overwrite director"..., 34`arf/': cannot overwrite directory) = 34
write(2, "\n"..., 1) = 1
その-n
ため、arfを使用しないと逆参照されるため、lnは実際にarfとして扱い/
ます。あなたの特定の例では、エラーがなければ、おそらく内部に新しいシンボリックリンクを作成しており、/var/www/html/releases/build1390 app-current
それをクリーンアップしたいと思うでしょう。
-n
または--no-dereference
を使用して、ターゲットがシンボリックリンクである場合にターゲットが逆参照されるのを防ぐことができます。-T
または--no-target-directory
を使用して、ターゲットファイルが常に通常のファイルとして処理されるようにすることもできます。
次の例に示すように、これらは少し異なる動作を生成します。しsrc
、いくつかのファイルであるdirlink
ディレクトリへのシンボリックリンクで、dir
実際のディレクトリです。
を使用して-n
:
ln -sfn src dirlink
上書きdirlink
してリンクしますsrc
ln -sfn src dir
リンクを作成します dir/src -> src
を使用して-T
:
ln -sfT src dirlink
上書きdirlink
してリンクしますsrc
ln -sfT src dir
エラーメッセージを生成します: ln: ‘dir’: cannot overwrite directory
cannot overwrite directory
か?
ln
自体はディレクトリを削除しません。これは、おそらく膨大な数のファイルを再帰的に削除する必要があるため、悪い考えです。