비슷한 질문이 있는 것으로 알고 있습니다.여기, 그러나 허용되는 답변은 rsync와 관련이 없으며 제 경우에는 OP 솔루션이 작동하지 않습니다.
CentOS 저장소를 저장소의 디스크 백업과 비교하여 로컬 저장소와 다른 모든 업데이트를 얻으려고 합니다.
rsync -avh --dry-run --compare-dest=/run/media/user/centos6/updates/x86_64/Packages /home/REPOS/6/updates/x86_64/Packages/ updates
그러나 시험 실행 결과 새 패키지뿐만 아니라 모든 패키지가 전송되는 것으로 나타났습니다.
저장소에서 디스크로 복사한 것처럼 다른 시험 실행을 수행하여 새 패키지만 전송합니다.
rsync -avh --dry-run /home/REPOS/6/updates/x86_64/Packages/ /run/media/djones/centos6/updates/x86_64/Packages
따라서 rsync는 분명히 새 파일을 구별할 수 있지만 어떤 이유로 비교 대상 옵션이 여전히 작동하지 않는 것 같습니다.
빠르고 더러운 해결책은 두 번째 명령을 사용하여 파일 목록을 덤프한 다음 rsync에 공급하는 것입니다. 하지만 저는 정말로 "올바른" 방식으로 하고 싶습니다.
답변1
나도 같은 문제를 겪었습니다. 이렇게 해야 합니다.
rsync -avh --dry-run \
--compare-dest=/run/media/user/centos6/updates/x86_64/ \
/home/REPOS/6/updates/x86_64/Packages \
/path/to/updates
노트 --compare-dest
소스 폴더의 상위 폴더입니다 . 소스 폴더 끝에 Packages
넣지 마세요 !/
답변2
다음과 같은 것이 필요합니다. (
rsync --compare-dest=$local_repo/ $centos_repo/ $differences/
폴더를 변수로 정의하거나 변수를 경로로 변경합니다. 경로는 /로 끝나야 합니다.)
$differences
현재 데이터 등으로 변경할 수도 있습니다.
centos_repo와 local_repo(centos_repo가 소스) 사이의 폴더 내의 차이점을 차이점 폴더에 복사합니다. 전체 디렉토리 트리를 생성하지만 diff에서 변경된 파일만 삽입합니다.
누구든지 이것을 백업용으로 사용하는 경우 소스(centos_repo)에서 삭제되고 비교(local_repo)에 있는 파일은 diff에 복사되지 않는다는 점을 기억하십시오.
답변3
rsync는 파일이 "동일"한지 결정할 때 내용만 확인하지 않습니다. 제대로 작동하게 하려면 때때로 "--no-times"(한 번은 효과가 있었습니다) 또는 "--no-perms", "--no-owner", "--no" 등 플래그 -group을 사용해야 합니다. "--체크섬" 등
(https://askubuntu.com/questions/1139188/rsync-compare-dest-does-not-work)