rsync가 심볼릭 링크에 대해 불평합니다.

rsync가 심볼릭 링크에 대해 불평합니다.

dry-run(-n) 옵션을 사용하여 rsync서로 다른 두 시스템의 디렉터리를 비교합니다. 표준 파일 및 디렉토리에서는 모든 것이 잘 작동합니다. 그러나 심볼릭 링크가 포함된 디렉터리를 사용하면 다음 오류가 발생합니다.

> ls -l /usr/user1/server10s/system/
total 1
lrwxrwxrwx   1 localuser  other         37 Jun 19 17:18 nrcalc -> /usr/user2/nrcalc10s
> rsync -n -avrc /usr/user1/server10s/* aisdba@Server:deployment_area/server
building file list ... done
system/
cannot delete non-empty directory: system/nrcalc
could not make way for new symlink: system/nrcalc
template/
template/nrcalc
sent 190 bytes  received 24 bytes  38.91 bytes/sec
total size is 330  speedup is 1.54
rsync error: some files could not be transferred (code 23) at main.c(692)

실제로 아무것도 변경하려고 시도하지 않았기 때문에 디렉토리를 삭제할 수 없어서 기쁘지만 왜 그렇게 하려고 합니까? 그런데 -l(링크) 및 (링크 복사) 옵션을 추가해 보았지만 -K소용이 없었습니다.

디렉토리 구조에 심볼릭 링크가 있는 경우에도 이 비교를 어떻게 할 수 있습니까?

답변1

표시된 대로 system/nrcalc로컬 시스템의 심볼릭 링크이지만 원격 서버의 디렉터리입니다. 원격 시스템의 디렉토리가 비어 있지 않으면 rsync는 --force또는 옵션 중 하나를 지정하지 않는 한 해당 디렉토리 삭제를 거부합니다(기호 링크를 만들기 위해) --delete. 원격 디렉토리를 교체하고 싶지 않지만 여전히 로컬 심볼릭 링크가 가리키는 항목으로 업데이트해야 하는 경우 를 사용할 수 있습니다 --copy-dirlinks.

Rsync는 지정된 경우에도 이에 대해 불평하여 --dry-run사용자가 요청한 작업을 수행하려면 원격 디렉터리를 삭제해야 함을 상기시킵니다. 제가 언급한 옵션 중 하나를 결합하면 -n실제로 아무것도 삭제하지 않고 깔끔하게 테스트 실행을 수행할 수 있습니다.

시도한 다른 옵션은 다음과 같습니다.

  • 옵션 -K( )은 대상 측을 제외하고 --keep-dirlinks와 동일합니다 . --copy-dirlinks귀하의 심볼릭 링크는 소스 측에 있으므로 이 옵션은 귀하에게 영향을 미치지 않습니다.

  • 옵션 -l( --links)을 사용하면 심볼릭 링크가 심볼릭 링크로 복사되지만, 그렇지 않으면 --forcersync --delete는 비어 있지 않은 디렉터리를 심볼릭 링크로 바꾸는 것을 거부합니다. 또한 -a힌트를 사용 -l하면 계속 사용할 수 있습니다.

관련 정보