rsync가 이미 최신 파일을 복사하려고 하는 이유는 무엇입니까?

rsync가 이미 최신 파일을 복사하려고 하는 이유는 무엇입니까?

내 로컬 컴퓨터와 원격 컴퓨터에 두 개의 동일한 파일이 있습니다. 크기가 동일하고 로컬 시스템의 파일이 원격 시스템의 파일보다 최신이지만 rsync는 여전히 파일 복사를 시도합니다.

다음과 같이 rsync를 호출합니다.

rsync -nv -e "ssh -p 2222" user@host:/data/file.fif data/file.fif

-n( 옵션을 사용하지 않으면 복사 작업이 시작됩니다)

Rsync 문서에는 이런 일이 발생해서는 안 된다고 명확하게 명시되어 있습니다.

Rsync  finds files that need to be transferred using a "quick check" algorithm (by default) that looks for files that have changed in size or in last-modified time.

출력 stat:

# remote file
  File: `data/fif/Skovorodko_Olga_45_raw.fif'
  Size: 1137551966  Blocks: 2221784    IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 286338      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1037/  platon)   Gid: ( 1047/  platon)
Access: 2013-08-08 18:40:16.907581658 +0400
Modify: 2013-07-16 12:01:09.158763284 +0400
Change: 2013-07-16 12:01:09.158763284 +0400

# local file
  File: `data/fif/Skovorodko_Olga_45_raw.fif'
  Size: 1137551966  Blocks: 2221792    IO Block: 4096   regular file
Device: 801h/2049d  Inode: 12987232    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1005/  platon)   Gid: ( 1003/  platon)
Access: 2013-08-08 19:02:57.146223369 +0400
Modify: 2013-08-08 19:02:57.146223369 +0400
Change: 2013-08-08 19:02:57.146223369 +0400

왜 이런 일이 발생합니까?

고쳐 쓰다:

실행 rsync --size-only결과 파일은 복사되지 않습니다.

delta-transmission enabled
Skovorodko_Olga_45_raw.fif is uptodate
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 14 bytes  received 114 bytes  85.33 bytes/sec
total size is 1137551966  speedup is 8887124.73 (DRY RUN)

답변1

빠른 확인 알고리즘은 수정 시간이나 크기가 다른 모든 파일을 수정된 것으로 간주합니다. 따라서 대상 디렉터리에 동일한 파일의 최신 버전이 있는 경우 다른 버전으로 간주되어 소스 버전과 동기화됩니다.

이는 예상된(그리고 더 안전한) 동작입니다. 예를 들어 ~/src 및 ~/dest라는 두 개의 디렉토리가 있고 각각 foobar 파일이 있다고 가정합니다. ~/src/foobar에 "foo"를 쓰고 ~/dest/foobar에 "bar"를 씁니다. 이제 ~/src를 ~/dest로 동기화합니다. 뭘 기대 할까?

두 파일의 크기는 동일하지만 ~/dest의 파일이 더 최신입니다. Rsync의 표준 동작은 ~/dest/foobar를 ~/src/foobar로 바꾸는 것입니다. 물론 파일이 동일할 수도 있어 불필요한 일이지만 체크섬이나 비트별 비교를 수행하지 않으면 이를 알 수 있는 방법이 없습니다.

이 동작을 원하지 않는 경우, 즉 수신자에 최신 파일을 유지하려는 경우 -u(--update) 플래그를 사용해야 합니다.

-u, --update 이는 rsync가 대상에 존재하고 소스 파일보다 수정 시간이 최신인 모든 파일을 건너뛰도록 합니다. (기존 대상 파일의 수정 시간이 원본 파일과 동일한 경우 크기가 다르면 파일이 업데이트됩니다.)

관련 정보