cp -sの目的は何ですか?

cp -sの目的は何ですか?

この質問に対する答えが示すように、 ハードリンクに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適切な数のプレフィックスを追加できるように、ソースディレクトリとターゲットディレクトリが互いにどのように関連しているかを特定する試みは行われません../

関連情報