cp -L対cp -H


45

問題

cp -Hまたはcp -Lでファイルをコピーすると、同じ結果が得られます。

$ ls -l fileA
  fileA -> fileB
$ cp fileA somewhere/ -H
$ ls -l somewhere/
  fileA     # fileA is a copy of fileB, only renamed, with same properties!

ここでのこの回答では、両方のオプションを、と組み合わせて使用​​される同様のUNLESSとして説明します-R。私ではありません。ソフトリンクされたハードリンクファイルは、ソースでポイントするファイルの名前が変更されたコピーになります。
 

質問

cp -Hand の適切な使用法は何cp -Lですか?これは予想される動作ですか?


  私の解決しようとする試みman cp両方のオプションでまったく同じことを教えてくれますが、info cp「」の言葉遣いはそれをさらに混乱させます。多分これを少し分解するのを手伝うことができます:

-H コマンドライン引数がシンボリックリンクを指定する場合、シンボリックリンク自体ではなく、それが指すファイルをコピーします。ただし、再帰トラバーサルを介して検出されたシンボリックリンクコピー(その性質を保持)します。

これは私には矛盾のように聞こえます:シンボリックリンクの性質 «は、それがどこかを指しているということだと思います…

-L, --dereference シンボリックリンクからコピーする場合は、シンボリックリンクに従ってください。このオプションでcpは、シンボリックリンクを作成できません。たとえば、ソースツリーの(通常のファイルへの)シンボリックリンクは、宛先ツリーの通常のファイルにコピーされます。

シンボリックリンクが通常のファイルではないことは知っていますが、…ここでこの説明をやりすぎだと思います。


実行しinfo cp、検索し-Rます。それは言うCopy directories recursively. しかし、あなたは非ディレクトリでテストしています。違いは、コマンドライン引数ではなく、コピーするディレクトリの内容に関するものです。
ミケル

@Mikelディレクトリのコンテンツをコピーし、ディレクトリ自体にコンテンツをコピーしてみましたが、まったく同じ結果が得られました。また、私はかなり前に座って、このオプションの単語info cp選択が実際に–を意味するものを理解しようと懸命に努力しました。そして、この投稿についてです。投稿には、実際の文言も含まれていますinfo cp-したがって、少なくともそれを開く必要があります
;;

回答:


55

シンボリックリンクを使用すると、ツールには2つのことができます。

  1. シンボリックリンクをシンボリックリンクとして扱う(「その性質を維持する」)、または
  2. シンボリックリンクを指すファイルのタイプとして扱います。

-H「その性質を保持する」と言うことは矛盾ではありません。代替案を検討してください。を使用すると-Lcp見つかったシンボリックリンクが開かれ、その内容がターゲットファイル名にコピーされます。したがって、ソースはシンボリックリンクでしたが、そのコピーはシンボリックリンクではありません。したがって、「シンボリックリンクとしての性質を失いました」。

検討する

$ mkdir subdir
$ echo "some contents" > subdir/file
$ ln -s file subdir/link

# definition of "list", the abbreviated ls -l output used below
$ list() { ls -l "$@" | \
    awk '$0 !~ /^total/ { printf "%s %s\t%s %s %s\n", $1, $5, $9, $10, $11 }' ; }

$ list subdir
-rw-rw-r-- 14   file  
lrwxrwxrwx 4    link -> file

$ cp -rH subdir subdir-with-H
$ list subdir-with-H
-rw-rw-r-- 14   file  
lrwxrwxrwx 4    link -> file

$ cp -rL subdir subdir-with-L
$ list subdir-with-L
-rw-rw-r-- 14   file  
-rw-rw-r-- 14   link  

すばらしい答え—オプションが何をするかを説明する方法が大好きです。兄弟ディレクトリへのシンボリックリンクのコピーに関する私の質問にはまったく答えいませんが、簡単な実験を行って見つける方法を明らかにしました。😉
マイケルScheper

1
ああ、私が本当に知りたいことはこれでした:superuser.com/a/138594/219388
Michael Scheper

19

間の動作の違い-L-H時に来る-rだけでなくとして指定されています。 cpはサブディレクトリにシンボリックリンクを作成しません-L -rが、を使用すると作成されます-H -r


cp:-H、-L、および-Pオプションは、-rオプションと一緒に指定できません。
3z33etm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.