우분투 12.04에서 로컬 로이 동기화를 수행하고 있습니다. 파일은 일반적으로 작은 텍스트 파일 (코드)입니다.
source
디렉토리 에서 (mtime 스탬프 보존) target
을 복사하고 싶지만 파일이 target
이미 존재 하고 의 파일 보다 오래된 경우에만 복사하려고합니다 source
.
그래서에서 최신 파일 만 복사 source
하지만 파일이 있어야 target
하거나 복사되지 않습니다. ( source
보다 많은 파일이 target
있습니다.)
실제로 source
여러 target
디렉토리 에서 여러 디렉토리 로 복사 합니다. 솔루션 선택에 영향을 미치는 경우에 이것을 언급합니다. 그러나 target
필요한 경우 매번 새로운 것을 지정하여 명령을 여러 번 쉽게 실행할 수 있습니다 .
답변
나는 당신 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)