web-dev-qa-db-ja.com

別の名前のフォルダシンボリックリンクを作成するにはどうすればよいですか?

シンボリックリンクを作成したい

~/.pm2/logs -> /opt/myapp/log

私が走るとき

ln -sFf /opt/myapp/log ~/.pm2/logs

シンボリックリンクを取得します

~/.pm2/logs/log -> /opt/myapp/log

これは私が望むものではありません。

できれば、POSIX互換のソリューションをお勧めします。

5
ptkvsk

~/.pm2/logsにはすでにディレクトリがあります。そのディレクトリが存在するので、その中にシンボリックリンクが置かれます。

~/.pm2/logsをディレクトリではなくシンボリックリンクにしたい場合は、まず既存のディレクトリを削除するか、名前を変更する必要があります。

9
Kusalananda

他の回答が言うように、すでにそこにディレクトリがあります。

これを回避し、代わりにエラーメッセージを表示するには、-Tオプションを使用します。残念ながら、これはPosix(GNU)ではないと思います。

Gnu lnマニュアルから(cpとmvも同じ)。

   ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
   ln [OPTION]... TARGET                  (2nd form)
   ln [OPTION]... TARGET... DIRECTORY     (3rd form)
   ln [OPTION]... -t DIRECTORY TARGET...  (4th form)

-Tのないフォーム1は、フォーム3とあいまいです(両方に2つの引数があります)。

Posixでは、フォーム名3のディレクトリ名の最後に/を置くことで、このあいまいさをなくすことができますが、他の方法でできることはないと思います。これが、Gnuが-Tオプションを追加した理由です。

3
ctrl-alt-delor

最初に〜/ .pm2/logsディレクトリを削除します。ターゲットは既存のディレクトリであるため、リンクはその中に作成されます。

2
XrXca