
문제
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
and 의 올바른 사용법은 무엇입니까 cp -L
? 이것이 예상되는 동작입니까?
나의 해결 시도:
man cp
두 옵션 모두에 대해 거의 동일하다고 info cp
말하지만말씨나를 더욱 혼란스럽게 만듭니다. 어쩌면 이것을 조금 분석하는 데 도움이 될 수 있습니다.
-H
명령줄 인수가 심볼릭 링크를 지정하는 경우심볼릭 링크가 아닌 가리키는 파일을 복사하십시오.그 자체. 하지만,모든 심볼릭 링크를 복사(본질 유지)재귀 순회를 통해 발생합니다.
이것은 나에게 모순처럼 들립니다. 내 생각에는 »심볼릭 링크의 성격« 어딘가를 가리키는 걸까요…
-L, --dereference
복사할 때는 기호 링크를 따르십시오. 이 옵션을 사용하면cp
심볼릭 링크를 만들 수 없습니다. 예를 들어 소스 트리의 심볼릭 링크(일반 파일에 대한)는 대상 트리의 일반 파일에 복사됩니다.
나는 심볼릭 링크가 일반 파일이 아니라는 것을 알고 있지만… 여기서 설명하는 것이 너무 어렵다는 것을 인정합니다.
답변1
심볼릭 링크를 사용하면 도구에서 수행할 수 있는 두 가지 작업이 있습니다.
- 심볼릭 링크를 심볼릭 링크로 처리합니다("본질 보존").
- 심볼릭 링크를 가리키는 파일 유형으로 취급합니다.
"그 본성을 보존한다" 고 말하는 것은 -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
.