rsync를 통해 dest dir에서 불필요한 파일을 삭제 하시겠습니까?


51

내가 가지고 있다고

SRC 
  001.jpg
  002.jpg
  001.txt
  a.zip

DEST
  hello.jpg

rsync -d --delete SRC:{*.jpg,*.txt} DEST

DEST에서 hello.jpg를 제거하지 않습니다.이를 보관하는 방법을 알고 있습니까?

답변:


72

명령이 작동하지 않는 이유는 rsync 에 대한 매뉴얼 페이지에 설명되어 있습니다 (강조 추가).

--지우다

이것은 rsync에게 수신 측 (송신 측에없는 파일)에서 외부 파일을 삭제하되 동기화되는 디렉토리에 대해서만 삭제하도록 지시합니다. 와일드 카드가 쉘에 의해 확장되고 rsync는 디렉토리를 가져 오기 때문에 디렉토리의 내용에 와일드 카드를 사용하지 않고 전체 디렉토리 (예 : "dir"또는 "dir /")를 보내도록 rsync에 요청해야합니다. 파일의 상위 디렉토리가 아닌 개별 파일 전송 요청. 전송에서 제외 된 파일도 --delete-excluded 옵션을 사용하거나 전송 측에서만 일치하는 것으로 규칙을 표시하지 않으면 삭제되지 않습니다 (필터 규칙 섹션의 포함 / 제외 수정 자 참조).

따라서, 당신이 실행할 때

$ rsync -d --delete SRC:{*.jpg,*.txt} DEST

실제로 디렉토리 동기화를 요청하지 않고 소수의 특정 파일 만 있기 때문에 DEST의 원하지 않는 파일은 삭제되지 않습니다. 원하는 결과를 얻으려면 다음과 같이 해보십시오.

rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/

include 및 exclude 지시문의 순서가 중요합니다. 기본적으로 각 파일은 나타나는 순서대로 포함 또는 제외 패턴과 비교하여 검사됩니다. 따라서 확장자가 .jpg 또는 .txt 인 파일은 제외 된 "*"패턴과 일치하기 전에 "포함 된"패턴과 일치하므로 동기화됩니다. 다른 모든 것은 --exclude '*'패턴에 의해 제외됩니다 . 이 --delete-excluded옵션을 사용하면 DEST 측에서 제외 된 파일도 삭제됩니다.


@ 청, 조금 더 설명 관심? 문제 / 개선이 있으면 답변을 업데이트 해 드리겠습니다.
Steven D

효과가있다. 나는 추측한다. -프로세스가 혼란 스럽습니다. 다시 전송되었다고 생각하게 만드십시오.
Cheng

좀 더 설명하기 위해 답변을 편집했습니다.
Steven D

2
@ 청 : 당신이 원하지 않는 것 같아요 --delete-excluded. 그게 없으면, 단지 *.jpg*.txt대상 측에서 삭제 될 수 있습니다. 그것과 관련이없는 파일도 삭제됩니다. rsync 필터에 대한자습서에 관심이있을 수 있습니다 .
Gilles 'SO- 악마 그만'

3
감사! 나를 위해 소스 디렉토리에서 슬래시가 누락되었습니다.
vaughan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.