맨페이지에서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
.) 파일 복사의 시작과 끝에서 파일 크기와 수정 시간을 비교하여 이를 수행합니다. 파일이 변경되면 오류가 발생합니다.