フォルダが存在する場合、シンボリックリンクを生成しない方法はありますか?

フォルダが存在する場合、シンボリックリンクを生成しない方法はありますか?

私は次のようなものを持っています

フォルダAでこれを行うと、ln -s A a シンボリックリンクフォルダaが作成されます。コマンドを繰り返すと、ln -s A aデッドリンクa / Aが発生します。

ifexistsステートメントですべてをラップするのではなく、リンクが存在する場合lnを失敗させる方法はありますか?

答え1

探しているものが単一のコマンドに対する単一の条件付きテストである場合、そのステートメントは必要ありませんifリスト

によるとLESS=+/Lists man bash

   A  list  is a sequence of one or more pipelines separated by one of the
   operators ;, &, &&, or ||, and optionally terminated by one of ;, &, or
   <newline>.
...
   An AND list has the form

         command1 && command2

   command2  is  executed if, and only if, command1 returns an exit status
   of zero.

存在するフォルダが存在し、そのディレクトリが存在する場合にのみリンクを作成したいとしますmydirmylink2dirあなたが使用できる:

[ -d mydir ] && ln -s mydir mylink2dir

または均等に:

test -d mydir && ln -s mydir mylink2dir

答え2

-nディレクトリの作成を防ぐには、このオプションを使用します。これにより、既存のシンボリックリンクが上書きされますが、既存のシンボリックリンクが指すディレクトリ内にリンクが作成されることはありません。

ln -sn A a

ln -nPOSIXではありませんが、GNU coreutils、BusyBox、および* BSD(OSXを含む)に存在します。

関連情報