질문
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
이 두 가지 옵션은 정확히 동일 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