심볼릭 링크의 cp 대 cp -r

심볼릭 링크의 cp 대 cp -r

최근에 cp 명령을 시도하고 다음 사항을 확인했습니다. 파일 과 심볼릭 링크가 포함된
폴더가 있다고 가정해 보겠습니다 .foobarl-bar

foo
|-- bar
|-- lbar -> bar

lbar기본값으로 복사하면 다음과 같은 결과를 cp lbar copy-lbar얻습니다.

foo
|-- bar
|-- copy-lbar
|-- lbar -> bar

. 을 copy-lbar포함한 일반 파일 은 또는 . 대체 접근 방식을 사용할 때 다음과 같은 결과를 얻습니다.barcopy-lbarbarlbarcp -r lbar copy-lbar-recursive

foo
|-- bar
|-- copy-lbar
|-- copy-lbar-recursive -> bar
|-- lbar -> bar

이제 원본 파일을 나타내는 링크 lbar와 같습니다 .copy-lbar-recursivebar

그런데 링크 복사 방법에 대한 옵션을 변경하려는 이유는 무엇입니까 -r, --recursive? 이 둘의 합은 단순히 다음과 같이 표시됩니다.cp
helpmanualcp"재귀적으로 디렉터리 복사". 내부적으로 심볼릭 링크에 다른 영향을 미치기 위해
무슨 일이 일어나고 있나요 ?-r

답변1

완벽한GNU 문서(예를 들어 Debian 맨페이지는 아님) 다음 동작을 설명합니다.

심볼릭 링크에서 복사할 때 cp는 일반적으로 --link재귀적으로 복사하거나 ()를 사용하지 않는 경우에만 링크를 따릅니다. 이 기본값은 -l( ), , ( ), ( ) 및 옵션으로 재정의될 수 있습니다.--archive-a-d--dereference-L--no-dereference-P-H

그것은 또한 썼다,

'--recursive' 디렉토리를 재귀적으로 복사합니다. 기본적으로 --link( ) 옵션 [...] -l과 함께 사용되지 않는 한 소스 코드에서 심볼릭 링크를 따르지 마십시오.

-r을 사용하여 기호 링크나 특수 파일을 복사하는 것은 이식 가능하지 않습니다. [...]

또한 -R을 사용하여 기호 링크를 복사하는 것은 -P도 지정하지 않는 한 이식 가능하지 않습니다. POSIX에서는 기본적으로 기호 링크를 역참조하는 구현을 허용하기 때문입니다.

따라서 귀하의 질문에 직접 대답하기 위해 POSIX의 기본 동작과의 호환성 요소를 유지하기 위해 동작이 설명되어 있습니다.

관련 정보