폴더 재귀에 동기화하기 위해 rsync를 사용하는 방법을 알고 싶지만 새 파일이나 업데이트 된 파일 (소유자, 그룹 또는 타임 스탬프가 아닌 내용 만)을 업데이트해야하며 소스에 존재하지 않는 파일을 삭제하고 싶습니다 .
답변
난 당신이 사용할 수 있다고 생각 -no-
하는 옵션을 rsync
할 수 없습니다 당신이 동기화 중있는 파일의 소유권 또는 권한을 복사합니다.
rsync 맨 페이지에서 발췌
--no-OPTION
You may turn off one or more implied options by prefixing the option
name with "no-". Not all options may be pre‐fixed with a "no-":
only options that are implied by other options (e.g. --no-D,
--no-perms) or have different defaults in various circumstances (e.g.
--no-whole-file, --no-blocking-io, --no-dirs). You may specify
either the short or the long option name after the "no-" prefix (e.g.
--no-R is the same as --no-relative).
For example: if you want to use -a (--archive) but don’t want -o
(--owner), instead of converting -a into -rlptgD, you could specify
-a --no-o (or -a --no-owner).
The order of the options is important: if you specify --no-r -a, the
-r option would end up being turned on, the opposite of -a
--no-r. Note also that the side-effects of the --files-from
option are NOT positional, as it affects the default state of several
options and slightly changes the meaning of -a (see the --files-from
option for more details).
소유권 및 권한
매뉴얼 페이지를 살펴보면 다음과 같은 것을 사용하고 싶다고 생각합니다.
$ rsync -avz --no-perms --no-owner --no-group ...
존재하지 않는 파일을 삭제하려면 --delete
스위치를 사용하십시오 .
$ rsync -avz --no-perms --no-owner --no-group --delete ....
타임 스탬프
타임 스탬프에 관해서는 SOURCE와 DEST 파일의 비교 방법을 변경하지 않고 이것을 유지할 수있는 방법을 찾지 못했습니다. rsync
이 스위치를 사용하여 타임 스탬프를 무시 하도록 지시 할 수 있습니다 .
-I, --ignore-times
Normally rsync will skip any files that are already the same size
and have the same modification timestamp. This option turns off this
"quick check" behavior, causing all files to be updated.
최신 정보
타임 스탬프의 경우 --no-times
원하는 것을 수행 할 수 있습니다.
답변
-a 옵션 을 피하는 것이 더 쉽다고 생각합니다
$ -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
원하는 옵션 만 설정하십시오.
모든 옵션을 좋아하지만 user -o , group -g , time -t 및 permissions -p 의 수정은 좋아하지 않으므로 아카이브에서 해당 4 가지 옵션을 뺄 수 있습니다.
$ -rlD
대상에서 파일을 삭제하려면 –delete 옵션을 사용하십시오 .
귀하의 질문에 :하지만 모든 파일을 검사 할 것이라고 생각합니다 .rsync는 내용으로 만 변경된 파일 만 전송 / 검사 할 수 없습니다.
답변
나는 당신이 찾고있는 것이 옵션이라고 생각합니다.
rsync -r --size-only
매뉴얼 페이지에서 :
--size-only
This modifies rsync’s "quick check" algorithm for finding files that need to be transferred,
changing it from the default of transferring files with either a changed size or a changed
last-modified time to just looking for files that have changed in size. This is useful when
starting to use rsync after using another mirroring system which may not preserve timestamps
exactly.
소스 디렉토리에서 누락 된 파일을 정말로 삭제하려면 --delete
답변
rsync가 파일 모드 시간 및 크기를 기준으로 검사를 무시하고 “-c”스위치와 함께 chksum 기반 접근 방식을 사용하도록 강제 할 수 있습니다.
-c, --checksum skip based on checksum, not mod-time & size
즉, 파일 시간과 크기가 일치하는지 여부에 관계없이 전체 파일을 덩어리로 비교하고 소스 및 대상간에 관련 메타 데이터를 앞뒤로 전송해야하지만 서로 다른 덩어리 만 전송해야합니다. 소스와 대상 사이.
다른 사람이 제안한 다른 스위치와 함께이 스위치를 사용하면 복사 된 항목 (변경된 것만 복사)을 제한해야하며 소스와 대상간에 일관성 검사를 수행하는 이점이 있지만 링크 속도에 따라 시간이 더 오래 걸립니다. 파일 청크를 양쪽에 chksum하고 비교해야합니다).
답변
아래 명령은 완벽하게 작동하며 내 요구 사항에 맞게 테스트했으며 내용 변경 만 필요합니다.
rsync -acvzh source/ destination/