새로 생성된 파일을 원격 서버에 추가하여 기본 웹 서버를 원격 서버에 동기화하도록 rsync를 설정하려고 합니다.
이것은 내가 사용하는 명령입니다:
rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar
그러나 웹서버는 "--update" 플래그에도 불구하고 실제로 모든 파일을 전송한 것으로 보입니다. 다양한 플래그 조합을 시도했지만(예: "-a" 생략 및 "-uv" 사용) 아무런 도움이 되지 않았습니다. 새로 추가된 파일만 보내도록 rsync 명령을 수정하려면 어떻게 해야 합니까?
답변1
에서 man rsync
:
--ignore-existing skip updating files that exist on receiver
--update
약간 다른 작업을 수행하면 예상치 못한 결과가 나올 수 있습니다(참고자료 참조 man rsync
).
이렇게 하면 rsync가 대상에 있는 모든 파일을 건너뛰게 됩니다.그리고 수정 시간은 소스 파일보다 최신입니다.. (기존 대상 파일의 수정 시간이 원본 파일과 동일한 경우 크기가 다르면 파일이 업데이트됩니다.)
답변2
원본 서버와 대상 서버의 사용자/그룹 ID가 다르기 때문에 문제가 발생할 수 있습니다. 수정/새 파일뿐만 아니라 모든 파일을 전송하는 비슷한 상황에 있습니다. 해결책은 -t
( 대신 -a
) 및 -P
( 와 동일 --partial --progress
) 매개변수를 사용하는 것입니다.
rsync -h -v -r -P -t <source> <target>
또는 더 짧습니다(@Manngo에게 감사드립니다).
rsync -hvrPt <source> <target>
이는 새 파일과 이미 존재하지만 수정된 파일만 전송합니다. 사용자 및 그룹 ID 동기화와 같이 작동 하는 매개변수가 너무 많습니다 -a
. 제 경우에는 소스 시스템과 대상 시스템에 서로 다른 사용자와 그룹이 있었기 때문에 작동하지 않았습니다. 따라서 -a
모든 원본 및 대상 파일은 항상 "다른" 파일로 간주됩니다.
사양:
-h
: 사람이 읽을 수 있는 숫자-v
: 장황하다-r
: 디렉토리로 재귀-P
:--partial
(부분적으로 전송된 파일 보관) +
--progress
(전송 중 진행 상황 표시)-t
: 수정시간 유지
답변3
설명하는 문제는 /
후행 소스 디렉터리가 누락되었기 때문일 수 있습니다. 결과적으로 rsync
모든 파일은 두 번 복사됩니다. 첫 번째는 에 /foo/bar
, 두 번째는 에 /foo/bar/bar
업데이트됩니다 /foo/bar/bar
.
올바른 명령은 다음과 같아야 합니다.
rsync -avh -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar/ /foo/bar
답변4
참고하세요rsync --기존 무시 -raz --progress /var/www/88021064/var[이메일 보호됨]:/usr/home/xxx/public_html/var/는 아무 작업도 수행하지 않습니다., 그것이 나를 위해 일한 방식은 rsync --ignore-existing -raz --progress /var/www/88021064**/var/***였습니다.[이메일 보호됨]:/usr/home/xxx/public_html/var/, 숨겨진 파일은 한 번만 더 실행되므로 숨겨진 파일은 업데이트되지 않습니다. /var/www/88021064/var/.[^.]*