나는 당신 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 --archive --update --existing --whole-file --itemize-changes a/ b
. 아니면 대부분의 옵션이 불필요합니까? (이 파일들은 대부분 작은 텍스트 파일이기 때문에 전체 파일을 추가했습니다.)