この質問に対する答えが示すように、 ハードリンクにcp -lを使用することとlnを使用することに違いはありますか?
cpコマンドの-lオプションは、ディレクトリを繰り返しハードリンクするために作成されました。 -s オプションが該当しますが、ハードリンクの代わりにソフトリンクを生成しますが、再帰的には使用しないようです。
そうしようとすると、次のエラー メッセージが表示されます。
cp: `source_dir/source_file': can make relative symbolic links only in current directory
たぶん分布によって異なるかもしれません。 Ubuntu 12.04ではこれが結果です。ソースファイルとリンクが同じディレクトリにある場合にのみ機能します。
たぶん構文が間違っていますか?
cp -rs target_directory destination_directory
私が使ったものです。
例:
$ ls sourcedir/
-rw-rw---- 1 user group 1123 Jan 8 23:10 source_file
$ cp -rs sourcedir/ targetdir/
cp: `targetdir/sourcedir/source_file': can make relative symbolic links only in current directory
答え1
ソースディレクトリの絶対パスを指定すると、次のようになります。
cp -rs $PWD/sourcedir/ targetdir/
のシンボリックリンクにはtargetdir
絶対パスが含まれていますsourcedir
。
それ以外のシンボリックリンクのみを生成すると、次の結果が生成されます。
targetdir/filename -> sourcedir/filename
ただし、これはソースファイルを見つけるための正しい相対パスではなく、次のようにする必要があります。
targetdir/filename -> ../sourcedir/filename
cp
適切な数のプレフィックスを追加できるように、ソースディレクトリとターゲットディレクトリが互いにどのように関連しているかを特定する試みは行われません../
。