수신 측의 예외를 제외하고 송신 측에 존재하지 않는 수신 측의 파일을 삭제하도록 rsync 요청


29

이 스레드를 읽었습니다.

그러나 내가 알 수있는 한 (아마도 뭔가 빠졌을 수도 있음) 다음 질문을 다루지 않습니다.

rsync예외적으로 송신 측에 존재하지 않는 수신 측의 파일을 복사하고 삭제 하도록 요청하는 방법은 무엇입니까? (예 : .hg송신 측에 저장소가없는 경우에도 수신 측에서 수은 저장소 를 제거하지 마십시오 ).

하나의 가능성?

@Richard Holloway의 답변에서 차용합니다. 다음 줄이 있다고 가정 해보십시오.

rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path

내가 이해하는 한이 줄은 rsync일치하는 것을 제외하고 전송 경로에 존재하지 않는 수신 경로의 모든 것을 삭제합니다 dont_delete_me. 내 질문은 지금이다 : rsync 는 보내는쪽에 아무것도 일치 하지 않아도 일치하는받는쪽에 파일을 보관 합니까?dont_delete_me dont_delete_me

답변:


33

당신이 사용하는 경우 --delete--exclude함께 제외 된 위치에 소스 파일이 제거 된 경우에도 어떤 삭제되지 것입니다.

그러나 폴더가 전혀 생성되지 않는 문제가 발생 rsync합니다. 따라서 해당 폴더에 다른 rsync작업 이 필요 sync합니다.

예 :

rsync -nav /home/richardjh/keepall/ /home/backup/richardjh/keepall/
rsync -nav --exclude=keepall --delete /home/richardjh /home/backup/richardjh

다른 방법으로이를 실행할 수는 있지만 제거 된 모든 파일을 삭제 한 다음 교체하면 효율적이지 않습니다.

하나의 라이너로 할 수 없습니다.


@Richard에게 감사합니다. 당신의 대답은 내 원래의 질문이 생각했던 것보다 쉽다고 생각하게합니다. 나는 하나의 회선을 사용하는 경우 : rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path,하지 것이라고 rsync일들이 일치를 제외하고, 전송 경로에 존재하지 않는 수신 경로에서 삭제 모든 것을 dont_delete_me? 가장 중요한 것은 송신 측의 항목이 일치하지 않더라도rsync 수신 측의 항목을 일치시키는 것 입니까? 그럴 경우, 그것이 내가 필요한 유일한 선이라고 생각합니다. dont_delete_me dont_delete_me
Amelio Vazquez-Reina

맞지만 한 줄로 새 파일을 가져 오면 dont_delete_me 폴더에 대한 새 파일과 변경 사항도 얻지 못합니다. 변경 사항과 추가 사항을 동기화하지 않으려면 여기에 설명 된대로 --exclude 플래그를 사용하면됩니다.
Richard Holloway

@AmV 제외 된 파일은 --delete명시 적으로 지정하지 않으면에 의해 삭제되지 않습니다 --delete-excluded. 의 설명 참조 --delete--delete-excludedrsync와 설명서를.
Gilles 'SO- 악마 그만해'

4

다음 솔루션이 내 목적에 효과적이라는 것을 알았습니다.

rsync -r --exclude-from=do_not_send_to_dest --delete --exclude-from=do_not_modify_in_dest src/ dest

(참고 : 추가 -n드라이 런을 수행하고, 변경되지 않는 옵션 --delete--delete-excluded!)

명령을 실행하면 다음 특성이 발생합니다.

  • 소스 src디렉토리는 수정되지 않은 상태로 유지됩니다.
  • 대상 dest폴더는 다음을 제외하고 소스 폴더와 일치합니다.

    • do_not_send_to_dest목록의 항목 은 대상으로 전송되지 않으며
    • do_not_modify_in_dest목록의 항목 은 대상에서 수정되지 않은 상태로 남아 있습니다.
  • (참고 : 존재하지 않는 항목을 " do_not_"파일 중 하나에 나열해도 문제가 없습니다 .)

설명

rsync가 왼쪽에서 오른쪽으로 명령 줄 인수를 읽을 때 인수가 --deletersync를 내부적으로 "스위치 모드"로 바꾸어 --exclude-from옵션을 다시 사용할 수는 있지만 다른 의미로 사용하는 것 같습니다.

경고:

  • do_not_send_to_dest목록 의 항목 이 대상에 이미 존재하면 다음을 수행하십시오.

    • 이 명령은 대상에서 해당 항목을 제거하지 않습니다 (소스 디렉토리에서 항목을 먼저 제거하지 않는 한)
    • 주의 :로 변경 --delete하면 --delete-excluded두 목록 중 하나에 나열된 대상의 모든 항목이 삭제됩니다. xD (rsync는 개방적이고 유연하게 작성되었지만 미묘한 차이가 있습니까?)

가볍게 사용 테스트되었습니다.

" rsync version 3.0.9 protocol version 30"을 사용하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.