2011-10-12 5 views
8

동기화되기 전에 파일의 내용을 확인하도록 Rsync를 구성 할 수 있습니까? 체크섬에 관해 들었지만 체크섬 만 샘플링한다는 사실을 알게되었습니다. 콘텐츠가 변경되고 타임 스탬프가 아닌 경우에만 파일을 전송하려고합니다. rsync 모드를 사용하여 파일을 변경하는 방법이 있습니다. 필자의 시나리오에서는 매주 sample.text 파일이 생성되고 매주 생성되는 sample.text의 내용이 변경된 경우에만 원격 서버와 동기화하려고하므로 타임 스탬프가 분명히 변경됩니다. 그러나 콘텐츠 변경시에만 이전을 원합니다.동기화 전에 rsync에서 내용을 확인할 수 있습니까?

+0

당신이 rsync에 대한 매뉴얼 페이지를 시도? -c, --checksum rsync가 파일이 변경되어 전송이 필요한지 확인합니다. 이 옵션이 없으면 rsync는 (기본적으로) 각 파일의 크기와 수정 시간이 보낸 사람과받는 사람 사이에 일치하는지 확인하는 "빠른 검사"를 사용합니다. –

답변

23

예, 설명서를 읽어야합니다.

$ man rsync | grep "\--checksum" 
    -c, --checksum    skip based on checksum, not mod-time & size 

Rsync는 매우 복잡합니다. 맨 페이지와 함께 테스트 데이터를 가지고 시험해 보는 것이 좋습니다. 원격으로 중요한 작업을하기 전에 테스트 데이터를 사용하십시오.

대부분의 경우 사람들은 rsync -ac source dest을 사용합니다.

$ man rsync | grep "\--archive" 
-a, --archive    archive mode; same as -rlptgoD (no -H) 

그리고 그 -rlptgoD 쓰레기는 의미 recursive, copy symlinks as symlinks, preserve permissions, preserve times, preserve group, preserve owner, preserve device files (super-user only), preserve special filesskip based on checksum, not mod-time & size

-c 또는 --checksum 당신이 찾고, 당신의 상상 무엇 정말 그것은 단지 mtime을 샘플링하고 크기가 잘못되었다는 것입니다.

+3

+ 매뉴얼 페이지와 테스트 데이터로 인한 허황된 시간에 대해 _ - 매우 좋은 조언 –

8

rsync 맨 페이지의 --checksum 옵션을 참조하십시오.

또한 내용을 변경하면 크기가 변경된다는 것을 알고있는 경우 --size-only 옵션을 선택하는 것이 더 빠릅니다.

0

예 :

#!/bin/bash 
echo > diff.txt 
rsync -rvcn --delete /source/ /destination/ > diff.txt 
second_row=$(sed -n '2p' diff.txt) 
if [ "$second_row" = "" ]; then 
    echo there was no change 
else 
    echo there was change 
fi 
+1

이 코드가 작동해야하는 이유에 대한 설명을 추가해야합니다. 코드 자체에 주석을 추가 할 수도 있습니다. 나머지 지역 사회가 당신이 그 문제를 풀거나 대답하기 위해 무엇을했는지 이해하는 데 도움이 될만한 설명을 제공하지 마십시오. – ishmaelMakitla

+0

변화가 없다면 rsync의 verbose 모드에서 diff.txt의 두 번째 행이 비어 있습니다. sed는이 두 번째 행을 검사합니다. – oldbowman

관련 문제