이 질문은 본질적으로 사용 경험이 부족하기 때문에 발생합니다 rsync
. 중복되는 경우 즉시 삭제하겠습니다.
/dir-scr
센서 판독값을 통해 생산 데이터가 지속적으로 공급되는 로컬 폴더가 있습니다 . 약 10분마다 yyyymmddhhmmss.dat
타임스탬프가 지정된 파일 이름이 포함된 파일이 생성되며 크기는 약 0~40MB입니다. 그리고 닫습니다. 약 10분 후에 다른 파일이 생성됩니다.
여러 업데이트의 일괄 실행을 수행했습니다.
$ rsync -azvP /dir-src/* host-dst:dir-src/
부분적으로 채워진 파일을 성공적으로 복사하고 교체하여 40MB 전체 파일과 25MB의 현재 파일을 복사하고 다음 업데이트에서는 25MB 파일을 40MB 전체 버전으로 교체합니다.
현재는 아직 복사되지 않은 파일을 실수로 삭제하지 않기 위해 수동으로 이동을 하고 있습니다.
rsync
이제 다음과 같은 플래그 중 하나를 사용하고 싶습니다 .
--exclude
--delete-excluded
--delete-after
--remove-source-files
그러나 나는 그들의 작동에 대해 확신하지 못합니다.
문제는 이를 사용하여 rsync
10분보다 오래된 파일을 이동하고 /dir-src
이미 존재하는 경우에만 삭제하는 방법입니다 host-dst:dir-dst/
.
답변1
rsyncs를 사용하는 내장 삭제 옵션은 다음과 같습니다.올바른 방법은 아니다이 문제를 해결하기 위해. 다음과 같은 작업을 수행하는 경우:
$ rsync -azvP --remove-source-files /dir-src/* host-dst:dir-src/
rsync가 부분적으로 채워진 파일을 전송한 다음 삭제하는 상황이 발생할 수 있습니다. 동일한 이름으로 파일을 다시 생성하면 rsync는 대상 시스템의 복사본을 덮어씁니다. 따라서 파일의 처음 절반이 손실됩니다.
어쩌면 당신은 이것을 고려하고 싶을 수도 있습니다. rsync가 정상적으로 전송을 수행하도록 한 다음예약 된 일들10분마다 실행하고 유사한 작업을 수행합니다.
$ find /dir-src -type f -mmin +15 -exec rm -f {} +
dir-src
그러면 이 디렉터리에서 15분보다 오래된 모든 파일을 찾아서 삭제합니다. 여기서는 파일을 채우는 데 필요한 최대 시간이 15분이라고 가정합니다. 필요에 맞게 이 값을 조정해야 할 수도 있습니다. 또한 테스트할 때 -exec rm -f {} +
로 바꾸면 -print
find 가 파괴적인 작업을 수행하기 전에 실제로 삭제하려는 파일만 선택하도록 할 수 있습니다.
귀하의 의견에서는 네트워크 연결이 불안정하며 rsync가 성공적으로 완료되지 않을 수 있다는 우려가 있다고 말씀하셨습니다. 보조 디렉터리를 생성한 후 이 문제를 해결하는 한 가지 방법은 다음과 같습니다.
- 15분마다 15분보다 오래된 모든 파일이 에서 으로 이동
dir-src
됩니다dir-aux
. - 10분마다 에서 까지의 파일을 rsync
dir-aux
합니다host-dst:dir-src
. - 60분마다 삭제합니다
dir-aux
.
이렇게 하면 파일이 삭제되기 전에 rsync가 5~6회 실행될 수 있습니다. 연결 상태에 따라 이 정도로 충분할 수도 있습니다. 그런 다음 테스트 결과에 따라 60분을 연장하거나 단축할 수 있습니다.