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 -Hand 의 올바른 사용법은 무엇입니까 cp -L? 이것이 예상되는 동작입니까?


  나의 해결 시도: man cp두 옵션 모두에 대해 거의 동일하다고 info cp말하지만말씨나를 더욱 혼란스럽게 만듭니다. 어쩌면 이것을 조금 분석하는 데 도움이 될 수 있습니다.

-H 명령줄 인수가 심볼릭 링크를 지정하는 경우심볼릭 링크가 아닌 가리키는 파일을 복사하십시오.그 자체. 하지만,모든 심볼릭 링크를 복사(본질 유지)재귀 순회를 통해 발생합니다.

이것은 나에게 모순처럼 들립니다. 내 생각에는 »심볼릭 링크의 성격« 어딘가를 가리키는 걸까요…

-L, --dereference 복사할 때는 기호 링크를 따르십시오. 이 옵션을 사용하면 cp심볼릭 링크를 만들 수 없습니다. 예를 들어 소스 트리의 심볼릭 링크(일반 파일에 대한)는 대상 트리의 일반 파일에 복사됩니다.

나는 심볼릭 링크가 일반 파일이 아니라는 것을 알고 있지만… 여기서 설명하는 것이 너무 어렵다는 것을 인정합니다.

답변1

심볼릭 링크를 사용하면 도구에서 수행할 수 있는 두 가지 작업이 있습니다.

  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  

답변2

-L와 사이의 동작 차이 도 지정될 -H때 발생합니다 -r. cp을 사용하면 하위 디렉터리에 심볼릭 링크가 생성되지 않지만 를 -L -r사용하면 생성됩니다 -H -r.

관련 정보