rsync는 정확히 무엇을 동기화할지 결정합니까?


15

질문에 대한 여러 답변을 찾고 있으므로 임의의 반 쓸모없는 정보로 채워서 가장 큰 블로그를 만들고 싶지 않고 실제로 그것을 사용하는 사람들에게 물어보고 싶었습니다.

시나리오 : 저 rsync -av --progress /dir/a /dir/b 와 그 일을합니다.

/ dir / a에 새 파일을 추가하고 동일한 명령을 다시 실행하면 수행 한 작업을 알고 새 파일 만 복사합니다.

/ dir / a에 새 파일을 추가하고 / dir / b의 일부 파일 이름을 바꾸고 일부 파일을 삭제할 수도 있습니다.

rsync -av --progress /dir/a /dir/b다시 실행 하면 무엇을 복사합니까? 새 파일은 이전에 복사 한 것을 알기 때문에 또는 더 이상 존재하지 않기 때문에 이름을 바꾸거나 삭제 한 파일도 알고 있기 때문입니다.

그리고 보너스로 이전에 복사 한 파일 다시 복사하면 / dir / a에 새로 추가 된 파일 복사되도록 방지 할 수 있습니까?

현재 수동으로 확인하고는 있지만 데이터가 커질수록이 작업을 수행하기 위해 더 많은 자동화가 필요합니다.


3
-i플래그는 매우 편리합니다. 모든 파일에 대해, 일치하는 이유를보기 위해 디코딩 할 수있는 일치 문자열을 제공합니다 (mod 시간 플래그, 크기 플래그 등)
BowlOfRed

답변:


17

/ dir / a에 새 파일을 추가하고 동일한 명령을 다시 실행하면 수행 한 작업을 알고 새 파일 만 복사합니다.

아니요, 이전 실행에서 무엇을했는지 알 수 없습니다. 수신 측의 데이터와 전송할 데이터를 비교합니다. 데이터가 충분하지 않으면 이것이 분명하지 않지만 디렉토리가 충분히 크면 실제로 복사가 시작되기 전에 비교하는 데 걸리는 시간이 쉽게 느껴집니다.

기본 점검은 파일 수정 시간 및 크기입니다. 보낸 사람 man rsync:

-c, --checksum
      This changes the way rsync checks if the files have been changed
      and  are in need of a transfer.  Without this option, rsync uses
      a "quick check" that (by default) checks if each file’s size and
      time of last modification match between the sender and receiver.
      This option changes this to compare a 128-bit checksum for  each
      file  that  has a matching size.  Generating the checksums means
      that both sides will expend a lot of disk I/O  reading  all  the
      data  in  the  files  in  the transfer (and this is prior to any
      reading that will be done to transfer changed  files),  so  this
      can slow things down significantly.

과:

-u, --update
      This  forces  rsync  to  skip  any  files  which  exist  on  the
      destination  and  have  a  modified  time that is newer than the
      source  file.   (If  an  existing   destination   file   has   a
      modification time equal to the source file’s, it will be updated
      if the sizes are different.)

이러한 옵션은 사용한 옵션에 의해 암시되지 않습니다. -a입니다 :

-a, --archive               archive mode; same as -rlptgoD (no -H)
-r, --recursive             recurse into directories
-l, --links                 copy symlinks as symlinks
-p, --perms                 preserve permissions
-o, --owner                 preserve owner (super-user only)
-g, --group                 preserve group
    --devices               preserve device files (super-user only)
    --specials              preserve special files
-D                          same as --devices --specials
-t, --times                 preserve times

내가 지금까지 본 최고의 설명, 감사합니다
SPooKYiNeSS

2
약간의 추가. 이름이 바뀐 파일은 양쪽 끝에서 고유 한 파일로 취급됩니다. --fuzzy한 번 지정 하면 동일한 디렉토리에서 동일한 것으로 인식됩니다. --fuzzy두 번 사용 하면이 기능이 다른 위치로 확장됩니다. 자세한 내용 man rsync을 참조하십시오. 물론, 사용하는 주된 이유 중 하나 rsync는 변경된 파일의 일부만 복사 할 수 있기 때문입니다 . 이렇게하면 네트워크를 통한 전송이 훨씬 빨라질 수 있습니다. BTW, 체크섬 옵션은 rsync작동 방식 에 대한 설명으로 위에서 언급했습니다 . 대부분의 경우 사용해서는 안됩니다.
Joe

6

일반

올바르게 이해하면 rsync -av메모리가 없으므로 소스에 있지만 더 이상 대상에 없기 때문에 이름이 바뀌거나 삭제 된 파일도 복사됩니다.

  • -n, 'dry run' 옵션을 사용 하여 rsync명령 행 을 실행하기 전에 수행되는 작업을 확인하십시오 .

  • 소스 디렉토리 다음에 슬래시의 특별한 의미에 주목하고

    rsync -av --progress dir/a/ dir/b
    

    rsync -av --progress dir/a dir/b
    

    설명서에 설명되어 있습니다 man rsync.

특별한 경우 (파일을 소스 디렉토리 'a'에 추가하고 대상 디렉토리 'b'에서 파일을 제거)는 추가 된 파일과 이전에 복사 된 파일이 모두 소스 디렉토리에 있기 때문에 추가합니다. 이것은 옵션의 유무에 관계없이 발생 하며 소스 디렉토리에 유지하려면 쉽게 고칠 수 -u있는 옵션을 모릅니다 rsync.

그러나 소스 디렉토리에서 파일을 제거하거나 파일 이름을 파일에 넣고 excluded옵션 --exclude-from=excluded(많은 파일의 경우) 또는 --exclude=PATTERN하나 또는 몇 개의 파일에 대한 옵션을 사용할 수 있습니다.

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-2

sent 103 bytes  received 25 bytes  256.00 bytes/sec
total size is 13  speedup is 0.10 (DRY RUN)

$ rsync -av --progress dir/a/ dir/b
sending incremental file list
./
file-1
              6 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/3)
file-2
              7 100%    6.84kB/s    0:00:00 (xfr#2, to-chk=0/3)

sent 196 bytes  received 57 bytes  506.00 bytes/sec
total size is 13  speedup is 0.05

$ echo textx-3>./dir/a/file-3

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-3

sent 121 bytes  received 22 bytes  286.00 bytes/sec
total size is 21  speedup is 0.15 (DRY RUN)

$ rm dir/b/file-1 
rm: ta bort normal fil 'dir/b/file-1'? y

$ rsync -avn --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3

sent 124 bytes  received 25 bytes  298.00 bytes/sec
total size is 21  speedup is 0.14 (DRY RUN)

$ rsync -avun --progress dir/a/ dir/b
sending incremental file list
./
file-1
file-3

sent 124 bytes  received 25 bytes  298.00 bytes/sec
total size is 21  speedup is 0.14 (DRY RUN)

$ rsync -avun --exclude=file-1 --progress dir/a/ dir/b
sending incremental file list
./
file-3

sent 104 bytes  received 22 bytes  252.00 bytes/sec
total size is 15  speedup is 0.12 (DRY RUN)

대안 : unison

이 도구를 테스트 할 수 있습니다 unisonA는, 동기화 도구를. 특별한 경우를 식별하고 수행 할 작업을 결정하는 시각적 방법을 제공합니다. GUI 버전 ( unison-gtk)이 있습니다.


좋은 예 감사합니다. 난, 난 그냥 응용 프로그램에서이 부탁 해요 마지막 일에서 /을 알지 못했다, 그것을 놓친 (당신은 분명히 난 그냥 복사 볼 수 있습니다 / 게시
SPooKYiNeSS

그리고 다시 완료하기 전에 전송하고 내 의견을 편집 할 수 없게합니다 ... 두 번째 의견을 복사 / 붙여 넣습니다. 나는 unuson을 살펴보고 그것이 내가 원하는 것을 할 수 있는지 살펴보고, 아니면 내가 계획 b로 돌아가서 스크립트를 만들 것입니다
SPooKYiNeSS

나는 unison-gtk몇 년 동안 사용해 왔으며 , 그것에 만족합니다. (나도 사용합니다 rsync.)
sudodus

1

/ dir / a의 새 파일 만 복사합니다. --delete 옵션을 사용하지 않으면 / dir / b에서 수행 한 작업은 무시됩니다. 이 경우 / dir / b에서 이름이 바뀐 파일이 삭제됩니다. / dir / b가 정확히 / dir / a와 같아 지도록 강제합니다.

보너스에 대해서는 / dir / a에서 파일 이름을 바꾸고 / dir / b로 rsyncing하는 경우와 같은 의미입니까? 이 경우 rsync가 파일을 다시 복사하지 못하게하는 방법이 없다고 생각합니다.


나는 속성을 사용하여 결정하는 것 외에 다른 방법이있을 것이라고 기대하지 않았지만 아동 스크립트를 만들고 있다면 더 이상 필요하지 않을 것입니다. 그래도 대답에 감사드립니다. 적어도 이제 내가해야 할 일을 알고 있습니다.
SpooKYiNeSS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.