최근에 cp 명령을 실험한 결과 다음과 같은 사실을 발견했습니다. 파일 과 심볼릭 링크가 포함된
폴더가 있다고 가정해 보겠습니다 .foo
bar
l-bar
foo
|-- bar
|-- lbar -> bar
lbar
기본값으로 복사하면 cp lbar copy-lbar
다음과 같은 결과가 나옵니다.
foo
|-- bar
|-- copy-lbar
|-- lbar -> bar
copy-lbar
의 원본 내용을 포함하는 일반 파일은 어디에 있습니까 bar
? 또는 copy-lbar
와 어떤 식으로든 연결되어 있지 않습니다 . 대신 사용하면 다음과 같은 결과를 얻습니다.bar
lbar
cp -r lbar copy-lbar-recursive
foo
|-- bar
|-- copy-lbar
|-- copy-lbar-recursive -> bar
|-- lbar -> bar
lbar
이제 와 마찬가지로 은 copy-lbar-recursive
원본 bar
파일에 대한 링크를 나타냅니다.
그런데 링크가 복사되는 방식을 변경하는 -r, --recursive
옵션이 있는 이유는 무엇입니까? 와 둘 다 다음과 같이 플래그를 지정합니다.cp
help
manual
cp
"디렉토리를 재귀적으로 복사합니다". 심볼릭 링크에 다른 영향을 미치는
내부적으로 어떤 일이 발생합니까 ?-r
답변1
전체GNU 문서(예를 들어 Debian 맨페이지는 아님) 다음과 같이 동작을 설명합니다.
--link
심볼릭 링크에서 복사할 때 cp는 일반적으로 재귀적으로 복사하지 않거나 (-l
)가 사용될 때만 링크를 따릅니다 . 이 기본값은--archive
(-a
),-d
,--dereference
(-L
),--no-dereference
(-P
) 및-H
옵션 으로 재정의될 수 있습니다 .
그것은 또한 쓴다,
'
--recursive
' 디렉토리를 재귀적으로 복사합니다. 기본적으로--link
(-l
) 옵션 [...] 과 함께 사용하지 않는 한 소스의 심볼릭 링크를 따르지 마십시오.
-r을 사용하여 기호 링크나 특수 파일을 복사하는 것은 이식 가능하지 않습니다. [...]
또한 -P를 지정하지 않는 한 -R을 사용하여 기호 링크를 복사하는 것은 이식성이 없습니다. POSIX에서는 기본적으로 기호 링크를 역참조하는 구현을 허용하기 때문입니다.
따라서 귀하의 질문에 직접 대답하기 위해 POSIX와의 기본 동작 호환성 요소를 유지하기 위해 동작이 설명되어 있습니다.