파일 시스템의 마지막 수정 타임 스탬프를 신뢰할 수 있다면 Rsync와 UNIX / Linux 'find'유틸리티를 결합하여 작업 속도를 높일 수 있습니다. 'find'는 지난 날에 마지막으로 수정 된 시간을 표시하는 모든 파일 목록을 조합 한 다음 단축 된 파일 / 디렉토리 목록 만 Rsync로 파이프 할 수 있습니다. 이것은 Rsync가 발신자의 모든 단일 파일의 메타 데이터를 원격 서버와 비교하는 것보다 훨씬 빠릅니다.
즉, 다음 명령은 지난 24 시간 동안 변경된 파일 및 디렉토리 목록에서 Rsync 만 실행합니다. (Rsync는 다른 파일 / 디렉토리를 확인하지 않아도됩니다.)
find /local/data/path/ -mindepth 1 -ctime -0 -print0 | xargs -0 -n 1 -I {} -- rsync -a {} remote.host:/remote/data/path/.
'find'명령에 익숙하지 않은 경우 특정 디렉토리 하위 트리를 통해 반복하여 지정한 기준에 맞는 파일 및 / 또는 디렉토리를 찾습니다. 예를 들어 다음 명령은
find . -name '\.svn' -type d -ctime -0 -print
현재 디렉토리 ( ".")에서 시작하여 모든 하위 디렉토리를 통해 재귀하여 다음을 찾습니다.
- 모든 디렉토리 ( "-타입 d")
- ".svn"( "-name '.svn'"),
- 지난 24 시간 동안 메타 데이터가 수정되었습니다 ( "-ctime -0").
표준 출력에서 해당 기준과 일치하는 항목의 전체 경로 이름 ( "-print")을 인쇄합니다. '-name', '-type'및 '-ctime'옵션을 "tests"라고하며, "-print"옵션을 "action"이라고합니다. 'find'매뉴얼 페이지에는 전체 테스트 및 조치 목록이 있습니다.
정말 영리하고 싶다면 '-ctime'대신 'find'명령의 '-cnewer'테스트를 사용하여이 프로세스를보다 내결함성과 유연성으로 만들 수 있습니다. '-cnewer'는 트리의 각 파일 / 디렉토리가 일부 참조 파일보다 최근에 메타 데이터가 수정되었는지 테스트합니다. 'touch'를 사용하여 각 실행의 시작 부분에서 'find ... 직전의 NEXT 실행 참조 파일을 작성하십시오. rsync ... '명령이 실행됩니다. 기본 구현은 다음과 같습니다.
#!/bin/sh
curr_ref_file=`ls /var/run/last_rsync_run.*`
next_ref_file="/var/run/last_rsync_run.$RANDOM"
touch $next_ref_file
find /local/data/path/ -mindepth 1 -cnewer $curr_ref_file -print0 | xargs -0 -n 1 -I {} -- rsync -a {} remote.host:/remote/data/path/.
rm -f $curr_ref_file
이 스크립트는 마지막으로 실행 된 시간을 자동으로 알고 마지막 실행 이후 수정 된 파일 만 전송합니다. 이 방법은 더 복잡하지만 가동 중지 시간이나 기타 오류로 인해 24 시간 이상 작업을 놓친 상황으로부터 사용자를 보호합니다.