파일을 동기화하는 가장 좋은 방법-기존 파일 만 복사하고 대상보다 최신 인 경우에만 복사


18

우분투 12.04에서 로컬 로이 동기화를 수행하고 있습니다. 파일은 일반적으로 작은 텍스트 파일 (코드)입니다.

source디렉토리 에서 (mtime 스탬프 보존) target을 복사하고 싶지만 파일이 target 이미 존재 하고 의 파일 보다 오래된 경우에만 복사하려고합니다 source.

그래서에서 최신 파일 만 복사 source하지만 파일이 있어야 target하거나 복사되지 않습니다. ( source보다 많은 파일이 target있습니다.)

실제로 source여러 target디렉토리 에서 여러 디렉토리 로 복사 합니다. 솔루션 선택에 영향을 미치는 경우에 이것을 언급합니다. 그러나 target필요한 경우 매번 새로운 것을 지정하여 명령을 여러 번 쉽게 실행할 수 있습니다 .

답변:


29

나는 당신 rsync이 이것을 할 수 있다고 믿습니다 . 주요 관찰은 --existing--update스위치 를 사용해야 할 것 입니다.

        --existing              skip creating new files on receiver
        -u, --update            skip files that are newer on the receiver

이와 같은 명령은 다음과 같습니다.

$ rsync -avz --update --existing src/ dst

다음과 같은 샘플 데이터가 있다고 가정하십시오.

$ mkdir -p src/; touch src/file{1..3}
$ mkdir -p dst/; touch dst/file{2..3}
$ touch -d 20120101 src/file2

다음과 같이 보입니다.

$ ls -l src/ dst/
dst/:
total 0
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file2
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file3

src/:
total 0
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file1
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 file2
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file3

이제이 디렉토리를 동기화하면 아무 일도 일어나지 않습니다.

$ rsync -avz --update --existing src/ dst
sending incremental file list

sent 12 bytes  received 31 bytes  406.00 bytes/sec
total size is 0  speedup is 0.00

우리의 경우 touch소스 파일 그래서 새로운 있다는 :

$ touch src/file3 
$ ls -l src/file3
-rw-rw-r--. 1 saml saml 0 Feb 27 01:04 src/file3

다른 rsync명령 실행 :

$ rsync -avz --update --existing src/ dst
sending incremental file list
file3

sent 115 bytes  received 31 bytes  292.00 bytes/sec
total size is 0  speedup is 0.00

우리는 file3새로운 것이기 때문에에 존재한다는 것을 알 수 있습니다 dst/.

테스팅

명령을 느슨하게 풀기 전에 제대로 작동하려면 다른 rsync스위치를 사용하는 것이 좋습니다 --dry-run. 또 다른 -v것을 추가 하여 rsync출력이 더 장황합니다.

$ rsync -avvz --dry-run --update --existing src/ dst 
sending incremental file list
delta-transmission disabled for local transfer or --whole-file
file1
file2 is uptodate
file3 is newer
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 88 bytes  received 21 bytes  218.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

감사합니다. rsync 옵션이 더 필요하지 않습니까? 맨 페이지를 읽고 있습니다. 이것이 필요할 것 같습니다 : rsync --archive --update --existing --whole-file --itemize-changes a/ b. 아니면 대부분의 옵션이 불필요합니까? (이 파일들은 대부분 작은 텍스트 파일이기 때문에 전체 파일을 추가했습니다.)
Mountainie for Monica Cellio

@MountainX-필요한 옵션 만 추가하십시오. 그 -a스위치 부터 시작하겠습니다 -rlptgoD.
slm

그것을 명확히하겠습니다. 나는에 대해 혼란스러워하고있어 --update--existing. 둘 다 필요합니까? 귀하의 솔루션을 테스트했는데 작동하는 것 같지만 여전히 추가하는 것이 안전하다고 생각 --update합니다.
Monica Cellio를위한 MountainX

@MountainX-추가 할 수 있는지 확인하십시오 .A에도 넣습니다.
slm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.