한 시스템의 하위 디렉터리를 재동기화하고 이를 원격 호스트의 동일한 상위 디렉터리(존재하지 않음)에 배치하려고 합니다. rsync를 루트로 사용하고 chown을 지정하면 원격 시스템의 하위 디렉터리 소유권은 정확하지만 새로 생성된 상위 디렉터리는 올바르지 않으며 상위 디렉터리는 루트가 소유하게 됩니다. SSH 보안 규칙을 위반하는 일부 권한 문제로 인해 루트로 이 작업을 수행해야 합니다(원격 호스트의 대상 계정에 있는 키를 사용할 수 없음).
예:
시스템 A:
- bob123:bob123 755 - /홈/bob123/config/
- bob123:bob123 755 - /home/bob123/configurations/app1/
- bob123:bob123 755 - /home/bob123/configurations/app2/
- ...
시스템 B:
- bob123: bob123 755 - /홈/bob123/(디렉토리가 비어 있습니다)
시스템 A의 루트로서:
rsync --chown=bob123:bob123 -IHrlptD /home/bob123/configurations/app4 system-b:/home/bob123/configurations/
결과 :
- 루트: 루트755장-/home/bob123/configuration
- bob123:bob123 755 - /home/bob123/configurations/app4
다른 옵션을 시도했지만 작동하고 system-b:/home/bob123/configurations
항상 app4
디렉터리 트리 소유권과 권한이 올바른 루트(bob123:bob123 소유)가 소유하는 옵션을 찾지 못했습니다.
푸시가 발생하면 ssh를 사용하여 mkdir을 실행할 수 있지만 rsync만 사용하여 원하는 것을 달성할 수 있는지 궁금합니다.
업데이트: 이것이 중요한지는 확실하지 않지만 시스템은 rsync 3.1.2 및 OpenSSH_7.6p1을 사용하는 Ubuntu 18.04입니다.
############ 해결책: ############
도움을 주신 @roaima에게 감사드립니다!
이 -R
옵션은 /./
누락된 옵션입니다. 또한 이러한 -go
옵션 도 포함해야 했습니다 .
나는 다음과 같이 끝났습니다.
rsync --chown=bob321:bob321 -IHazR /home/bob123/./configurations/app4 system-b:/home/bob321/
두 시스템에 동일한 사용자가 있는 경우에는 사용할 필요가 없지만 --chown
프로세스 소유자가 다른 원격 시스템에는 필요합니다. 위의 예에서는 chown을 사용하여 다양한 사용법을 반영합니다. 내 스크립트에서 chown 옵션 설정은 원격 호스트 주소에 따라 다릅니다.
-R
이 옵션을 사용하여 올바른 방향을 알려준 @roaima에게 다시 한 번 감사드립니다 !
답변1
귀하의 명령(여기서 단순화됨)은 configurations
전송할 디렉터리 목록에 포함되지 않으므로 이와 같은 전송 규칙이 chown
적용되지 않습니다.
rsync -a /home/bob123/configurations/app4 system-b:/home/bob123/configurations/
/home/bob123
대상에 이미 존재 하는 경우 rsync
대상과 일치하는 추가 디렉터리가 생성됩니다 /home/bob123/configurations
. 그런 다음 app4
소스 파일이나 디렉터리 트리를 새로 생성된 대상 디렉터리에 복사합니다.
configurations
전송 디렉터리 목록에 포함시키 려면 -R
( --recursive
) 플래그를 사용하고 configurations
전송 트리에 소스 디렉터리를 포함하면 됩니다.
rsync --chown=bob123:bob123 -IHrlptDR /home/bob123/./configurations/app4 system-b:/home/bob123/
bob123
system-b
이를 처리하는 또 다른 방법은 대상 사용자가 암시적으로 모든 것을 소유하도록 on으로 로그인하는 것입니다 .
rsync -Ia /home/bob123/configurations/app4 bob123@system-b:configurations/
-I
PS 정말로 ( )을 원하시나요 --ignore-times
? 반드시 필요한 경우가 아니면 이 플래그를 사용하지 마십시오.