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
)을 사용하면 심볼릭 링크가 심볼릭 링크로 복사되지만, 그렇지 않으면--force
rsync--delete
는 비어 있지 않은 디렉터리를 심볼릭 링크로 바꾸는 것을 거부합니다. 또한-a
힌트를 사용-l
하면 계속 사용할 수 있습니다.