以下はディレクトリのシンボリックリンクを作成するための私のコードです:
Sudo ln -s /usr/local/nginx/conf/ /etc/nginx
私はすでにディレクトリ/etc/nginx
を作成しました。ソースディレクトリ(/usr/local/nginx/conf/
)の内容をターゲットディレクトリ(/etc/nginx
)の内容に含めるだけです。しかし、コードを実行すると、/etc/nginx
にはconf
の内容の代わりにconf
という名前のディレクトリが含まれています。そのディレクトリは私が欲しい内容を含んでいますが、間違った場所にあります。
ディレクトリの内容をターゲットフォルダに配置するのではなく、ディレクトリをターゲットフォルダに配置したのはなぜですか。
これは、2番目の引数がディレクトリの場合のln
の動作です。それは最初の引数 へのリンクをその内側に配置します 。 /etc/nginx
をシンボリックリンクにしたい場合は、最初にそのディレクトリを削除してから同じコマンドを実行する必要があります。
ターゲットが既に存在し、それがディレクトリである場合、ln
は文書化されています。 /etc/nginx
を contains aシンボリックリンクではなく be シンボリックリンクにしたい場合は、最初にディレクトリとして作成しない方がいいでしょう。
スクリプトではこのような何か便利です:
if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi
スクリプトを再実行した後に「悪い」ループのシンボリックリンクを再作成する前に防止します。