rsync(또는 기타 도구)를 사용하여 두 시스템 간의 파일 타임스탬프를 수정하세요.

rsync(또는 기타 도구)를 사용하여 두 시스템 간의 파일 타임스탬프를 수정하세요.

동일한 파일 구조를 가진 두 개의 시스템(A,B)이 있습니다. 파일은 동일하지만 위치(B) 중 하나에서 파일 타임스탬프가 올바르지 않습니다. 문제는 B의 타임스탬프 대부분이 A보다 최신 날짜로 설정되어 있다는 것입니다. rsync(또는 다른 도구)를 사용하여 이 문제를 해결할 수 있는 방법이 있습니까?

문제는 수정하지 않으면 rsync -azEX --delete A B날짜에 파일이 최신 버전으로 표시되기 때문에 B 측에서 수정이 이루어지지 않는다는 것입니다(그리고 전체 파일 구조를 전송하는 것은 피하고 싶은 옵션입니다).

답변1

AB다른 시스템을 대표하고 로컬 파일 시스템의 일부가 아닌 경우 rsync메타데이터만 전송됩니다. 그러나 체크섬이 올바른지 확인하기 위해 양쪽에서 파일을 읽지만 파일의 다른 부분만 전송합니다.

rsync -azX /some/path/ user@remote:/target/path

양쪽의 콘텐츠가 동일하다는 것을 보장할 수 있다면 시간 확인을 해제해도 여전히 타임스탬프 값을 전달할 수 있습니다. 이렇게 하면 양쪽에서 파일 메타데이터를 읽을 수 있지만 파일 내용은 읽지 않습니다.

파일 크기가 다른 경우 rsync파일의 어느 부분을 전송해야 하는지 확인하기 위해 체크섬이 양쪽에서 다시 수행되지만, 그렇지 않으면 위에서 언급한 것처럼 크기가 같은 파일의 경우 파일 내용이 가져오지 않습니다. 계정에.

rsync -azX --size-only /some/path/ user@remote:/target/path

실제 예로, 런던에서 매우 느린 링크(1Mbit/s)를 통해 런던에서 암스테르담으로 600MB 파일이 전송되고 있습니다. 분명히 원본은 꽤 오랜 시간이 걸렸습니다. 파일을 복사한 다음 타임스탬프를 재설정했습니다. 제안 #1은 약 10초 정도 소요됩니다. 제안 #2는 1초도 채 걸리지 않습니다. 둘 다 파일 콘텐츠를 전송하지 않습니다.

답변2

A 또는 B에 깨진 심볼릭 링크가 없다고 가정하면 다음을 권장합니다.mtree:

$ mtree -Pcp A -k time | ssh hostB mtree -Ptp B

이는 파일 계층에서 발견된 타임스탬프를 기반으로 트리 사양을 생성하고 해당 사양을 사용하여 호스트에 있는 A계층에서 해당 파일의 타임스탬프를 설정합니다.BhostB

관련 정보