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../適切な数のプレフィックスを追加できるように、ソース ディレクトリとターゲット ディレクトリが相互にどのように関連しているかを把握しようとしません。

関連情報