답변:
명령이 작동하지 않는 이유는 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 측에서 제외 된 파일도 삭제됩니다.
--delete-excluded
. 그게 없으면, 단지 *.jpg
와 *.txt
대상 측에서 삭제 될 수 있습니다. 그것과 관련이없는 파일도 삭제됩니다. rsync 필터에 대한 이 자습서에 관심이있을 수 있습니다 .