체크섬이 동일하더라도 Rsync는 계속 파일을 복사합니다.

체크섬이 동일하더라도 Rsync는 계속 파일을 복사합니다.

rsync를 사용하여 두 디렉터리와 해당 파일 내용을 비교하고 이를 새로운 빈 디렉터리로 전송하고 싶습니다. 그래서 저는 작은 POC를 만들었습니다.

OLD/
...main.js

NEW/
...main.js

CHANGES/

NEW와 OLD의 main.js 파일은 동일하며 동일한 체크섬을 갖습니다. 하지만 내가 사용할 때 :

rsync -rvcm --compare-dest=OLD/ NEW/ CHANGES/

main.js 파일은 여전히 ​​CHANGES 폴더에 복사됩니다. 이런 일이 발생하지 않도록 하려면 어떻게 해야 하나요? 체크섬이 다른 파일만 복사하고 싶습니다.

답변1

--compare-dest=DIR

[…]

경로가 상대 경로 인 경우 DIR대상 디렉터리를 기준으로 합니다. […]

(원천:man 1 rsync)

당신의 명령에 따라

rsync -rvcm --compare-dest=OLD/ NEW/ CHANGES/

OLD/상대 경로입니다. 대상 디렉터리는 입니다 CHANGES/. OLD/"대상 디렉터리에 상대적"은 실제로 CHANGES/OLD/현재 작업 디렉터리에 상대적이라는 의미입니다. 이 디렉터리는 설정에 존재하지 않을 가능성이 높습니다. 존재하더라도 참조하는 디렉토리가 아닙니다.

OLD/호출할 수 있는 현재 작업 디렉토리를 의미합니다 CHANGES/../OLD/. 상대 부분 CHANGES/../OLD/다음과 같습니다.

rsync -rvcm --compare-dest=../OLD/ NEW/ CHANGES/

CHANGES디렉토리에 대한 심볼릭 링크인 경우 반드시 그런 것은 CHANGES/../아닙니다 ./(비교ls ..Symlink 디렉터리에 있을 때 실제 상위 콘텐츠가 표시되는 이유는 무엇입니까?). 이 경우에는 CHANGES/../OLD/의미하지 않습니다 OLD/. --compare-dest=…다음을 기반으로 논증을 구성하세요.물리적디렉토리 구조.

답변2

일반적으로 타임스탬프를 포함하고 체크섬 강제 적용을 중지하는 것이 좋습니다.

rsync -rtvm --compare-dest=OLD/ NEW/ CHANGES/

-aLinux 기본 파일 시스템 간에 복사 하는 경우 -rt.

로컬 복사본을 사용하고 있으므로( 동일한 시스템에 있는 NEW/것으로 CHANGES/보임) 체크섬을 사용하여 확인하는 것은 의미가 없습니다. 파일을 복사하는 것만으로도 속도는 거의 같습니다.

관련 정보