rsync를 사용하여 소스 파일의 어떤 속성이 전송을 유발하는 대상 파일과 다른지 어떻게 알 수 있습니까?

rsync를 사용하여 소스 파일의 어떤 속성이 전송을 유발하는 대상 파일과 다른지 어떻게 알 수 있습니까?

나는 rsync원격 데이터 전송 및 백업 목적에 크게 의존하며 때로는 다른 파일 시스템 유형을 사용하기도 합니다. AFAIK는 rsync기본적으로 파일 크기와 수정 타임스탬프를 비교하여 전송해야 할 파일을 찾습니다. 이 동작은 플래그를 사용하여 파일 크기로만 변경할 수 --size-only있으며 플래그를 사용하여 파일 체크섬으로 대체할 수 있습니다 --checksum.

때때로 나는 목적지가 소스와 동일한 데이터를 가지고 있다는 것을 알면서도 왜 rsync큰 파일 트리를 재전송해야 한다고 결정했는지 잘 모르겠습니다.

두 파일 트리 간의 차이점을 쉽게 알아내는 데 도움이 되는 rsync 옵션이나 유사한 옵션이 있습니까? 예를 들어 각 파일에 대해 타임스탬프, 소유자/그룹, 권한, 파일 크기/내용 등 중 하나를 인쇄할 수 있습니다.

답변1

첫째, rsync에 그러한 옵션이 있으면 나는 그것에 대해 모르고 매뉴얼 페이지에서 찾을 수 없습니다. 이는 필요한 것을 신속하게 제공하고 가능한 모든 rsync사용 사례에서 작동할 수 있기 때문에 불행한 일입니다.

둘째, 기존 rsync 옵션을 사용하여 이 작업을 수행하려고 하면(기본적으로 --dry-run과 가능한 많은 체크섬, 최신 날짜, 이전 날짜, 파일을 결합해야 함) 제거되고 무한 루프가 발생한다고 생각합니다. 파일이 삭제되었을 수 있는 가능한 이유별로 하나씩 여러 번의 패스가 필요합니다 rsync. rsync이것은 귀하의 목적에 그다지 실용적이지 않은 것 같습니다.

두 개의 트리를 비교하고 차이점을 보고하고 필요에 맞게 출력을 연결하는 도구를 사용할 수 있다면 이는 mtree귀하의 요구를 충족할 수 있습니다.

mtree두 개의 디렉토리 트리를 비교하고 차이점을 보고하도록 특별히 설계되었습니다.

소스 머신에서 원하는 소스 트리(sha256 해시 포함)의 mtree 사양을 생성합니다.

# mtree -K sha256 -cp /my_path > my_path.mtree

그런 다음 rsync트리를 확장하고 원격 시스템에서 mtree를 실행하여 원격 디렉터리 트리 /remote_path가 로컬 /my_path와 일치하는지 확인합니다.

# rsync -a --delete /my_path/ remote:/remote_path/
# ssh remote mtree -p /remote_path < my_path.mtree && echo match
match

이제 원격 트리를 약간 수정해 보겠습니다. 간단히 말해서, farkle소스에 존재하지 않는 대상 파일을 만들고 , 파일을 삭제하고 file.txt, 파일의 타임스탬프를 변경했습니다 data.txt.

# ssh remote mtree -p remote_path < my_path.mtree || echo fail
.:      modification time (Wed Apr 17 10:49:32 2019, Wed Apr 17 11:55:10 2019)
extra: farkle
data.txt: 
        modification time (Wed Apr 17 10:45:02 2019, Wed Apr 17 11:56:27 2019)
foo:    size (32, 29)
        modification time (Tue Apr 16 10:16:44 2019, Wed Apr 17 11:53:18 2019)
        sha256digest (0x6082aa7261362c4c71c82adf492bc724de53a5814e64b233c43c6775efeb1dd0, 0x2d2537ea27c27dfb2c1690c51c652b9ada32adc29a91b732c24939dcff371cd6)
./file.txt missing
fail

mtree당신에게 알립니다:

  • farkle대상에는 존재하지만 소스에는 존재하지 않습니다. rsync명령줄에서 --delete를 지정하면 삭제됩니다.
  • data.txt콘텐츠(sha256 해시) 또는 크기는 변경되지 않았지만 최신 타임스탬프가 있습니다. 체크섬만을 기반으로 한 복사는 파일을 다시 전송할 수 없으며 rsync대상 파일이 이제 소스 파일보다 크기 때문에 "최신" 파일만 전송할 수도 없습니다. 새로운.
  • file.txt대상 호스트에 존재하지 않으며 rsync특정 제외 기준이 없으면 다음 실행 시 제거될 수 있습니다.

그래서 이것은 당신에게 직접적인 이유를 제공하지 않습니다rsync에서당신이 복사해야 한다고 생각하는 것을 왜 복사하고 있거나 복사하지 않는지에 대해서는하다로컬 및 원격 디렉토리 트리의 실제 조건에 대한 신뢰할 수 있고 검증 가능한 보고서를 제공합니다.

my_path.mtree예를 들어 파일 이름에 날짜 스탬프를 포함하여 출력 파일을 체계적으로 보존하는 경우 기존 mtree/my_path 트리를 이전 실행(어제? 지난주?)과 비교하여 로컬 컴퓨터에서 실행할 수도 있습니다. 당신이 생각하지 못했던 로컬 변경 사항입니다.

mtree일부 Unix 배포판에 포함되어 있지만 배포판에 mtree가 없으면 성공적으로 설치한 것입니다.GitHub의 Archie Cobbs 버전.

관련 정보