심볼릭 링크에서 cp -a의 예기치 않은 동작

심볼릭 링크에서 cp -a의 예기치 않은 동작

증분 백업에서 기호 링크를 복사할 때 예기치 않은 동작이 발생할 수 있습니다. 예를 들어:

# mkdir 0 1 2
# touch 0/a
# ln 0/a 0/b
# touch 1/a
# ln 1/b 1/a

그래서 디렉토리는 0다음과 같습니다

a
b->a

디렉토리는 1다음과 같습니다

a->b
b

이제 우리는 달린다

# cp -a 0/. 2
# cp -a 1/. 2

예상/예상되는 동작은 디렉토리가 2동일 1하지만 실제로는 두 개의 링크를 포함한다는 것입니다

a -> b
b -> a

이것은 실제로 /usr/ 디렉토리의 일부 rsync 백업을 복사할 때 발생했습니다. 작년에 /usr/share/zoneinfo 디렉토리는 다양한 심볼릭 링크 스위치를 거쳤습니다. cp -aSOURCE에서는 심볼릭 링크를 따르지 않지만 DEST에서는 심볼릭 링크를 따를 수 있는 것 같습니다 .

여기서 적절한 결과를 얻을 수 있는 방법이 있나요?

(그런데, rsync올바르게 완료되었지만 플래그도 사용하고 싶었습니다 --reflink=always...)cp

답변1

이렇게 하면 먼저 실행되지만 cp -a 1/. 2이미 존재하므로 내용이 기록됩니다 . 그러면 심볼릭 링크를 덮어쓰게 된다는 점을 고려하세요 . 다시 실행 하면 .bb -> abaa->baa->bcp -a 1/. 2"Too many levels of symbolic links"

예, cp대상의 심볼릭 링크를 따르십시오. --remove-destinationMWE의 문제를 해결해 볼 수 있습니다 . 그러나 심볼릭 링크를 대상의 디렉터리 구성 요소로 포함하면 포함되지 않습니다 --remove-destination.

진짜 질문은 "왜 이런 일을 하시겠습니까?"입니다. 저는 단지 cp -a빈 디렉토리를 대상으로 사용합니다. 또한 지원되는 파일 시스템에는 --reflink=always디렉터리 트리를 백업으로 복제하는 보다 우아한 방법이 있습니다.

관련 정보