cp -L および cp -H

cp -L および cp -H

質問

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!

この回答はここにありますと一緒に使用しない限り、両方のオプションが似ていると説明します-R。私には適していません。ハードリンクファイルと同様に、ソフトリンクファイルはソースが指すファイルの名前が変更されたコピーになります。
 

質問:

cp -Hとの正しい使い方は何ですかcp -L?これが予想される動作ですか?


  私は解決しようとしていますman cpこれら2つのオプションはまったく同じinfo cpですが、馬の種私をさらに混乱させる。たぶん、誰かが私がそれを分析するのに役立ちます。

-H コマンドライン引数がシンボリックリンクを指定する場合シンボリックリンクの代わりに指すファイルをコピーしてください。それ自体。しかし、すべてのシンボリックリンクのコピー(属性の維持)これは再帰巡回によって起こります。

これは私に矛盾して聞こえます。私の考えでは»シンボリックリンクの性格「どこかを指しています...

-L, --dereference コピーするときは、シンボリックリンクに従ってください。このオプションを使用すると、cpシンボリックリンクを作成できません。たとえば、ソースツリーの(一般ファイルへの)シンボリックリンクは、ターゲットツリーの一般ファイルにコピーされます。

私はシンボリックリンクが一般的なファイルではないことを知っていますが...ここの説明はあまりにも挑戦的であることを認めています。

ベストアンサー1

ツールはシンボリックリンクを使用して、次の2つのことを実行できます。

  1. シンボリックリンクをシンボリックリンクであるかのように処理します(「本質保存」)。
  2. シンボリックリンクをそれが指すファイルの種類と考えてください。

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

考える

$ 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  

おすすめ記事