24시간 이내에 디렉터리의 모든 파일을 찾은 다음 이 파일을 다른 서버와 동기화하고 싶습니다.
전송하고 싶지 않은 오래된 파일이 있지만 해당 오래된 파일이 최신 파일이라면 전송하겠습니다.
find 및 -ctime 매개변수를 사용하여 출력을 파일로 리디렉션하는 스크립트를 작성하려고 하는데 rsync를 효율적으로 사용하는 방법이나 일련의 파일을 전송하는 더 좋은 방법이 있는지 모르겠습니다. 몇 시간 내에 변경된 지난 24개 파일.
이 프로세스는 매우 자주 실행되어야 하므로 너무 비효율적인 것을 찾고 싶지 않습니다. (예: ftp를 사용하고 매번 모든 것을 보냅니다).
어떤 아이디어라도 감사하겠습니다.
답변1
이 시도:
cd /some/dir && rsync -av --files-from=<(find . -mtime 0 -printf "%p\n") <other stuff>
그것은 사용한다프로세스 교체 <( )
명령을 명명된 fifo로 바꾸고 동기화에 포함될 콘텐츠로 읽을 find
fifo의 이름을 제공합니다 .rsync
고쳐 쓰다
Kyle의 답변에 따르면 둘 다 작동하지만 분명히 --files-from
더 적절합니다 . --include-from
답변이 업데이트되었습니다.
답변2
#!/bin/sh
thefiles=/tmp/files.$$
LOCALDIR=/path/to/local/dir
REMOTEDIR=/path/to/remote/dir
REMOTEHOST=remote.host
changetime=24h
cd $LOCALDIR || { echo cd failed 1>&2; exit 1; }
trap 'rm -f $thefiles' 0
find . -type f -ctime -$changetime -print > $thefiles
rsync -v -n --archive --files-from=$thefiles . $REMOTEHOST:$REMOTEDIR
스크립트는 $LOCALDIR에서 find를 실행하고 결과를 파일에 덤프한 다음 rsync에게 파일 내용을 파일 목록으로 사용하여 $REMOTEHOST 호스트의 $REMOTEDIR 디렉터리로 전송하도록 지시합니다. rsync 명령에는 절대 경로가 아닌 상대 경로가 필요하기 때문에 스크립트 chdir을 $LOCALDIR에 추가합니다. rsync 매개변수에 -v -n을 남겨두었으므로 스크립트가 원하는 작업을 수행하는 데 만족하면 -n을 제거하세요.