에서 man rsync
:
- 기존의
뛰어 넘다새 파일 만들기수신기에서 (강조)
그래서 저는 확실한 성공을 거두었습니다.
rsync --existing -rtvhP "remote.machine:/photos/*" /photos
이렇게 하면 원격 컴퓨터의 원본 사진과 일치하도록 로컬 컴퓨터에서 변경된 모든 사진이 재설정되어야 합니다. 을 사용하면 -rt
폴더를 통해 재귀하고 타임스탬프가 재설정되지만, chowning이나 chmodding 또는 링크 복사에 신경 쓰지 마세요. 이것이 -a가 수행하는 작업입니다. ) 그러나 다른 파일은 전송하지 마세요. 변경되지 않은 파일도 아니고 수십 년 동안 사용된 다른 모든 폴더와 파일도 전송하지 마세요!
데이터를 변경했지만 파일 크기/수정 타임스탬프(rsync가 파일/폴더를 전송해야 하는지 결정하기 위해 기본적으로 사용하는)를 수정하지 않은 잠재적인 변경 사항을 식별하기 위해 다음을 추가할 것이라고 생각했습니다. -c
(올바른 체크섬).
rsync --existing -crtvhP "remote.machine:/photos/*" /photos
내가 알아차린 것은 파일/폴더가 내 로컬/사진에 존재하지 않는 경우에도 rsync가 "아무것도 하지 않았습니다"를 반환하기까지 많은 시간이 걸린다는 것입니다. 나는 이것이 --existing
파일이 존재했다면 수행했을 작업을 계속하기 전에 반환된 결과(예: "파일이 존재하지 않으므로 아무것도 수행하지 않음")를 사용하지 않는 rsync의 버그라고 생각합니다 . 이 경우 , 수천 개의 파일이 체크섬 처리되어 전송될 필요가 없습니다.
참고로 저는 숨겨진 dot.folders/dot.files가 아닌 보이는 파일만 전송하고 싶기 때문에 photos/*
대신 사용하고 있습니다 .photos/
이것이 중요한지는 모르겠지만 다른 UNIX 기반 서버와 통신하는 로컬 Mac의 zsh에서 rsync를 실행하고 있지만 이것이 동종 우분투 시스템 간에도 발생한다는 것을 확인했습니다.
이것이 실제로 rsync의 버그라면. 이를 신고할 수 있는 가장 좋은 장소가 어디인지 알려주실 수 있나요?
조언, 제안, 답변을 보내주셔서 감사합니다.
답변1
이 예에서는 rsync 버전 2.6.9 프로토콜 버전 29를 사용하고 있습니다.
제안해 주신 @Freddy에게 감사드립니다. 해당 -c
플래그는 rsync보다 우선하므로 --existing
불필요한(IMHO) 작업을 많이 수행하는 것 같습니다 . 여기에 내 테스트 사례가 있습니다. 새로 생성된 빈 디렉토리에 대해서는 아무것도 복사할 필요가 없으며 필요하지 않은 여러 항목을 체크섬하는 데 신경 쓰지 않을 것이라고 생각했지만 rsync에 다른 기본 설정이 있는 것처럼 보입니다(예: 체크섬 체크섬) 모든 것,그 다음에사용해야 하는지 결정하세요. ) ́\(트)/ ́
새로운 빈 폴더 "test"를 만들고 내장된 셸을 사용하여 time
13104장의 사진과 새 폴더의 0장의 사진을 동기화하는 각 테스트 사례에서 rsync가 작동한 시간을 추적했습니다.
% mkdir test
% time rsync -rtvhP --existing photos/* test
building file list ...
13104 files to consider
sent 710.56K bytes received 20 bytes 1.42Mbytes/sec
total size is 912.33G speedup is 1283921.48
rsync -rtvhP --existing photos/* test 0.03s user 0.09s system 37% cpu 0.327 total
% time rsync -rtvhPc --existing photos/* test
building file list ...
13104 files to consider
sent 919.66K bytes received 20 bytes 134.90 bytes/sec
total size is 912.33G speedup is 992002.92
rsync -rtvhPc --existing photos/* test 1201.16s user 210.36s system 20% cpu 1:53:37.01 total
그래서 체크섬 없이는 0.327초가 걸렸지만, 복사할 필요가 없는 파일들을 체크섬하는데 거의 2시간이 걸렸습니다. 이것은 rsync가 작동하는 방식이 아니지만 이것이 작동하는 방식을 아는 것이 좋습니다. :-)
답변2
따르다당신만의 대답확인이 우선하므로 --checksum
고려해야 할 파일 목록을 제공하여 --existing
보다 공격적인 버전을 구현할 수 있습니다.--existing
rsync
원래:
rsync --existing -crtvhP "remote.machine:/photos/*" /photos
수정된 변형:
cd /photos &&
find . -type f -print | rsync --dry-run --files-from=- -crtvh --progress 'remote.machine:/photos/' .
Mac을 사용하고 계시므로 GNU가 아닌 버전 find
의 rsync
. (나는 예상치 못한 파일 이름을 처리하는 것을 선호합니다 find … -print0 | rsync --from0 …
.)
예상한 대로 --dry-run
유효한 명령이 있다고 확신하면 삭제하세요.