심볼릭 링크의 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의 원본 내용을 포함하는 일반 파일은 어디에 있습니까 bar? 또는 copy-lbar와 어떤 식으로든 연결되어 있지 않습니다 . 대신 사용하면 다음과 같은 결과를 얻습니다.barlbarcp -r lbar copy-lbar-recursive

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

lbar이제 와 마찬가지로 은 copy-lbar-recursive원본 bar파일에 대한 링크를 나타냅니다.

그런데 링크가 복사되는 방식을 변경하는 -r, --recursive옵션이 있는 이유는 무엇입니까? 와 둘 다 다음과 같이 플래그를 지정합니다.cp
helpmanualcp"디렉토리를 재귀적으로 복사합니다". 심볼릭 링크에 다른 영향을 미치는
내부적으로 어떤 일이 발생합니까 ?-r

답변1

전체GNU 문서(예를 들어 Debian 맨페이지는 아님) 다음과 같이 동작을 설명합니다.

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

그것은 또한 쓴다,

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

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

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

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

관련 정보