rsync의 --remove-source-files 옵션 사용

rsync의 --remove-source-files 옵션 사용

맨페이지에서rsync

--소스 파일 삭제

이는 rsync에게 보내는 쪽에서 파일을 삭제하도록 지시합니다(즉,디렉터리가 아닌)그건전송의 일부그리고 이미수신 측에서 성공적으로 복사되었습니다..

  • 이는 발신자 측의 파일이 전송의 일부이거나 수신자 측에서 중복된다는 의미입니까?

  • 발신 디렉터리도 삭제할 수 있나요?

이 옵션은 다음에서만 사용할 수 있습니다.정적 소스 파일.

  • "정적 소스 파일"은 무엇을 의미합니까?

이 기능을 사용하여 특정 디렉터리에 나타나는 파일을 다른 호스트로 이동하는 경우 rsync가 완전히 덮어쓰지 않은 파일을 전송할 수 없도록 완료된 파일을 소스 디렉터리에 직접 쓰지 말고 소스 디렉터리에 이름을 바꿔야 합니다.

  • 무슨 뜻이에요?

먼저 다른 디렉터리에 파일을 쓸 수 없는 경우 rsync가 아직 완료되지 않은 파일의 전송을 방지할 수 있도록 하는 명명 규칙을 사용해야 합니다(예: 파일을 쓸 때 이름을 "foo.new"로 지정하고 " foo"가 완료된 후 rsync 전송을 위해 --exclude='*.new' 옵션을 사용하십시오.

  • 무슨 뜻이에요?

3.1.0부터 rsync는 파일 크기나 수정 시간이 유지되지 않으면 보낸 사람 삭제를 건너뛰고 오류를 인쇄합니다.

  • 무슨 뜻이에요?

감사해요.

답변1

Q: 이는 보낸 사람 측의 파일이 전송의 일부이거나 받는 사람 측의 파일이 중복된다는 의미입니까?

  • 답: 둘 다

Q: 발신 디렉터리를 삭제할 수 있나요?

  • 답변: 예
    --remove-source-files
    find <source_directory> -type d -empty -delete그런 다음 OR 명령을 실행하십시오
    find <source_directory> -type l -type d -empty -delete(삭제에 심볼릭 링크 포함).

(이전에는:--remove-source-files 그런 다음 명령을 실행rm -rf <source_directory>)


경고하다:

OrangeDog의 의견에서 언급했듯이 이 rm -rf제안은 안전하지 않습니다. 특히 어떤 이유로든 전송되지 않은 모든 파일(전송 목록 작성과 해당 파일의 실제 전송 시작 ​​사이에 변경된 파일, 수신 측의 디스크 공간 부족, 네트워크 연결 끊김 등)은 변경되지 않고 그대로 유지됩니다. rsync를 통한 소스 디렉토리 — rm -rf호출한 후에는 사라집니다. 위 명령은 find빈 소스 트리를 재귀적으로 삭제합니다.만약에모든 소스 파일이 성공적으로 전송 및 삭제되었지만 나머지 파일(물론 포함된 디렉터리도 포함)은 유지되지 않습니다.


Q: "정적 소스 파일"은 무엇을 의미합니까?

  • A: 작성되고 닫힌 파일을 나타냅니다.

Q: 이 기능을 사용하여 특정 디렉터리에 있는 파일을 다른 호스트로 이동하는 경우 rsync가 문서가 완전히 작성되지 않은 파일을 전송할 수 없도록 소스 디렉터리에 직접 쓰지 말고 완성된 파일의 이름을 소스 디렉터리로 변경해야 합니다.무슨 뜻이에요?

  • 답: 위에서도 말했지요

Q: 파일을 다른 디렉터리에 먼저 쓸 수 없는 경우 rsync가 아직 완료되지 않은 파일의 전송을 피할 수 있도록 하는 명명 규칙을 사용해야 합니다(예를 들어, 쓸 때 파일 이름을 "foo.new"로 지정). 완료되면 이름을 "foo"로 바꾼 다음 rsync 전송에 --exclude='*.new' 옵션을 사용합니다.무슨 뜻이에요?

  • 답변: 이는 RSYNC가 먼저 전송할 파일 목록을 만든다는 의미입니다. 그런 다음 다른 디렉터리(대상 디렉터리)에 기록하므로 아직 완료되지 않은 파일을 전송하는 경우 --exclude 옵션을 사용하여 완료 후 이름을 바꾸는 것이 가장 좋습니다.

Q: 3.1.0부터 rsync는 파일 크기나 수정 시간이 유지되지 않으면 보낸 사람 삭제를 건너뛰고 오류를 인쇄합니다.무슨 뜻이에요?

  • A: RSYNC가 대상 디렉터리에 파일을 쓰는 동안 파일을 스캔한 시간과 실제로 대상 디렉터리에 작성된 시간 사이에 파일 크기가 변경되었음을 감지하면 RSYNC는 파일을 건너뜁니다.

답변2

반대쪽으로또 다른 대답그런 점에서 특정 조건에서는 혼합 --remove-source-files및 혼합이 안전합니다.rm -rf

하지만 다른 구체적인 질문에 대해서는 조금 대답해 보겠습니다.

--remove-source-files플래그는 파일이 대상에 정확하고 완전히 복사된 후 삭제되도록 준비합니다. 이 세션 중에 또는 일부 가능한 이전 세션 중에 복사되었을 수도 있습니다.

이 플래그는 보낸 사람의 디렉터리는 삭제하지 않고 파일만 삭제합니다. 일반적인 방법은 이를 순진하게 호출하는 것입니다 rm -rf. 이는 전송이 실패하면 재앙이 될 수 있습니다. 여기서 해결 방법은 rsync모든 파일이 완전하고 올바르게 전송된 후에만 호출하도록 하는 것입니다.

rsync -a src/ dst && rm -rf src

여기에는 암묵적인 경쟁 조건이 있다는 점에 유의하세요. 처리 후 트리의 파일이 생성되거나 수정되면 src더 이상 원격 시스템과 올바르게 동기화되지 않더라도 rsync자동으로 완전히 삭제됩니다 . rm트리의 파일을 제어하고 src이러한 일이 발생하지 않을 것이라고 확신할 수 있다면 이 구성을 안전하게 사용할 수 있습니다 rsync && rm.

최신 버전에서는 rsync변경된 파일을 감지할 수 있습니다.기간그들의 사본. (전체 복사 도중이 아니라 src복사 도중에만 src/.../file.) 파일 복사의 시작과 끝에서 파일 크기와 수정 시간을 비교하여 이를 수행합니다. 파일이 변경되면 오류가 발생합니다.

관련 정보