네트워크를 통해 src에서 dst로 파일을 동기화하고 있습니다. Linux 매뉴얼 페이지에서 많은 rsync 옵션을 검색하고 있는데 도움이 필요합니다.
대상의 프로세스는 소스에서 "새로 도착한" 파일에 응답합니다. 예를 들어 소스 파일이 이틀 전에 수정되었지만 rsync
5분 전까지 전송되지 않았다고 가정합니다. 가장 최근 타임스탬프를 기준으로 새로 도착한 파일을 감지할 수 있습니다.
따라서 원하는 타임스탬프 동작이 필요합니다.
- dst 파일 수정 타임스탬프는 rsync 전송을 통해 항목이 마지막으로 추가된 시간을 나타내야 합니다.
- rsync가 새 콘텐츠를 전송하지 않고 src와 dst를 비교할 때, 즉 dst가 이미 src와 일치하는 경우 dst 파일 수정 타임스탬프는 변경되지 않아야 합니다.
어떤 rsync 옵션이 원하는 동작을 제공합니까?
답변1
이 작업을 효과적으로 수행할 수 없습니다. rsync
네트워크를 통한 긴 전송을 단축하는 주요 수단으로 타임스탬프를 사용하십시오.
이 타임스탬프 동작을 정말로 원한다면,
rsync
대상 파일 타임스탬프는 전송을 통해 콘텐츠가 마지막으로 추가된 시간을 나타내야 합니다.rsync
새 콘텐츠를 전송하지 않고 소스와 대상을 비교할 때 대상 파일 타임스탬프가 변경되어서는 안 됩니다.
그런 다음 모든 파일 전송 고려 사항에 대해 기껏해야 각 파일에 대한 완전한 체크섬으로 끝날 것입니다. 따라서 100개의 파일을 전송하고 해당 100개의 파일이 원본과 대상 모두에 존재하는 경우 rsync
실행될 때마다 100개 파일 모두 체크섬을 통해 변경되었는지 확인합니다. 상상할 수 있듯이 이는 매우 비효율적입니다.
rsync --archive --no-times --checksum /source/path remotehost:/destination/path
사용 사례를 설명하지 않았지만 일반적인 사용법 rsync
은 파일 수정 시간을 전송하여 전송된 것으로 보이는 파일 전송을 방지하는 것입니다.
rsync --times /source/path remotehost:/destination/path # or --archive
평소와 같이 --archive
= -a
, --times
= -t
, --no-times
= --no-t
, --checksum
=-c
답변2
증분 백업 사용 사례를 작성하고 있는 것 같습니다.
src 디렉토리(또는 적어도 src 호스트)에 파일을 유지하십시오.
$ date +%s >> backed_up.txt
이제 장부 파일은 mtime
항상 가장 최근 백업이 시작된 시간과 일치합니다. find . -newer backed_up.txt -type f
타임스탬프를 비교하고 전송하려는 파일 목록을 생성하는 데 사용됩니다 . rsync
목록을 제공 하고 --archive
또는 다른 방법을 사용하여 해당 태그를 dst 디렉토리에 보관하십시오.
여기서 핵심은 대상 파일에 대해 타임스탬프가 저장되거나 사용되는 방법을 변경하려고 하지 않는다는 것입니다. 우리는분리모델링 작업은 옆에 있는 부기 파일에 넣어두었습니다. 그래서 find
/ rsync
사용저것기존 파일 시스템에 새로운 사용법을 적용하기보다는 타임스탬프를 사용합니다.
이는 대상 호스트가 "새로 도착한" 파일을 감지하는 방법입니다. stat()
파일 이름만 확인하기 때문에 mtime을 반복적으로 호출하는 것보다 비용이 저렴합니다 . 고유한 파일 이름은 곧 재사용/추가되지 않을 것이라고 가정합니다.
#! /bin/bash
mv recent.{txt,old}
find some/dir -print | sort > recent.txt
NEW=$(comm -1 -3 recent.{old,txt})
이제 처리 단계에서 요구하는 것과 for FILE in $NEW
가장 가까운 파일 이름을 입력하여 반복 할 수 있습니다.xargs