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