最近cpコマンドを試して、次のことを確認しました。ファイルとシンボリックリンクを含む
フォルダがあるとします。foo
bar
l-bar
foo
|-- bar
|-- lbar -> bar
lbar
デフォルト値にコピーすると、次のような結果がcp lbar copy-lbar
得られます。
foo
|-- bar
|-- copy-lbar
|-- lbar -> bar
。をcopy-lbar
含む一般的なファイルは、または。代替アプローチを使用すると、次のような結果が得られます。bar
copy-lbar
bar
lbar
cp -r lbar copy-lbar-recursive
foo
|-- bar
|-- copy-lbar
|-- copy-lbar-recursive -> bar
|-- lbar -> bar
これで、元のファイルを表すリンクlbar
と同じです。copy-lbar-recursive
bar
しかし、リンクコピー方法のオプションを変更したいのはなぜですか-r, --recursive
?この2つの合計は、単に次のように表示されます。cp
help
manual
cp
「再帰的にディレクトリをコピー」。内部的にシンボリックリンクに異なる影響を与えるために
何が起こっていますか?-r
答え1
完璧GNUドキュメント(たとえば、Debianのマンページではありません)次の動作について説明します。
シンボリックリンクからコピーする場合、cpは通常
--link
再帰的にコピーするか()を使用しない場合にのみリンクに従います。このデフォルト値は-l
()、、()、()、およびオプションでオーバーライドできます。--archive
-a
-d
--dereference
-L
--no-dereference
-P
-H
それも書いた、
'
--recursive
'ディレクトリを再帰的にコピーします。デフォルトでは、--link
()オプション[...]-l
で使用されていない限り、ソースコードからシンボリックリンクをたどらないでください。
-rを使用してシンボリックリンクまたは特殊ファイルをコピーすることは移植可能ではありません。 [...]
また、-R を使用してシンボリックリンクをコピーすることは、-P も指定しない限り移植可能ではありません。 POSIXでは、基本的にシンボリックリンクを逆参照する実装を許可しているからです。
したがって、あなたの質問に直接答えるためにPOSIXの基本的な動作との互換性要素を維持するための動作が説明されています。