rsync를 통해 dest dir에서 불필요한 파일을 삭제 하시겠습니까? 001.txt a.zip DEST hello.jpg rsync -d

내가 가지고 있다고

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

DEST
  hello.jpg

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

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



답변

명령이 작동하지 않는 이유는 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 측에서 제외 된 파일도 삭제됩니다.