rsync
서버 A의 특정 디렉터리에 있는 모든 파일을 서버 B의 위치로 주기적으로 전송하는 cron 작업이 있습니다 . 파일이 크기 때문에 --partial
and를 사용합니다 . 또한 파일을 전송할 때 서버 A의 파일을 삭제하는 데에도 --append-verify
이 옵션을 사용합니다 . remove-source-files
매뉴얼 페이지에 따르면 rsync
소스 파일은 특정 실행에서 모든 파일 전송이 완료된 후에만 삭제됩니다.
일부 파일이 전송된 후 네트워크 오류로 인해 전송이 중간에 중단되지 않는 한 대부분의 경우 잘 작동합니다. 다음 실행 시 프로그램은 일부 파일이 대상에 이미 존재하는지 확인하고 해당 파일을 재전송할 필요가 없다고 올바르게 결정합니다. 그러나 전송 실행의 일부가 아니므로 원본 서버의 파일은 삭제되지 않습니다. 시간이 지남에 따라 점차 증가합니다.
소스 파일이 대상에 존재하는 경우 rsync
후속 실행에서 해당 파일을 삭제할 수 있는 방법이 있습니까? 아니면 직접 스크립트를 작성하여 이 문제를 해결해야 합니까?
답변1
솔직히 이것은 요청한 결과를 얻는 해킹적인 방법이기 때문에 실제로 대답은 아닙니다. 그래서 여기 있습니다:
해당 명령을 제거 --append-verify
하고 이 --update
명령으로 바꾸는 경우 다른 모든 옵션을 유지하고 이 명령 없이 RSYNC를 실행하십시오.
수정된 파일을 복사하는 동안 모든 소스 파일이 삭제됩니다.
답변2
나는 최근에 간단한 방법을 발견했습니다.
rsync -rav --remove-source-files --backup-dir=<BAK> <SRC> <DST>
DST에 존재하고 "변경된" 것으로 감지된 모든 파일은 BAK로 이동됩니다. 이제 SRC 폴더를 삭제하고 BAK를 새 소스 폴더로 처리할 수 있습니다.