回答:
それは私のために働いています、出力は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してリンクしますsrcln -sfn src dir リンクを作成します dir/src -> srcを使用して-T:
ln -sfT src dirlink上書きdirlinkしてリンクしますsrcln -sfT src dir エラーメッセージを生成します: ln: ‘dir’: cannot overwrite directorycannot overwrite directoryか?
ln自体はディレクトリを削除しません。これは、おそらく膨大な数のファイルを再帰的に削除する必要があるため、悪い考えです。