최근에 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 맨페이지는 아님) 다음 동작을 설명합니다.
심볼릭 링크에서 복사할 때 cp는 일반적으로
--link
재귀적으로 복사하거나 ()를 사용하지 않는 경우에만 링크를 따릅니다. 이 기본값은-l
( ), , ( ), ( ) 및 옵션으로 재정의될 수 있습니다.--archive
-a
-d
--dereference
-L
--no-dereference
-P
-H
그것은 또한 썼다,
'
--recursive
' 디렉토리를 재귀적으로 복사합니다. 기본적으로--link
( ) 옵션 [...]-l
과 함께 사용되지 않는 한 소스 코드에서 심볼릭 링크를 따르지 마십시오.
-r을 사용하여 기호 링크나 특수 파일을 복사하는 것은 이식 가능하지 않습니다. [...]
또한 -R을 사용하여 기호 링크를 복사하는 것은 -P도 지정하지 않는 한 이식 가능하지 않습니다. POSIX에서는 기본적으로 기호 링크를 역참조하는 구현을 허용하기 때문입니다.
따라서 귀하의 질문에 직접 대답하기 위해 POSIX의 기본 동작과의 호환성 요소를 유지하기 위해 동작이 설명되어 있습니다.