rsync를 통해 대상 디렉터리에서 관련 없는 파일을 삭제하시겠습니까?

rsync를 통해 대상 디렉터리에서 관련 없는 파일을 삭제하시겠습니까?

내가 가지고 있다고 말해

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

DEST
  hello.jpg

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

DEST에서 hello.jpg를 삭제하지 않습니다. 보관하는 방법을 아시나요?

답변1

명령이 작동하지 않는 이유는 다음과 같습니다.rsync 매뉴얼 페이지(강조하다):

- 삭제

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

그래서 당신이 달릴 때

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

실제로 디렉터리 동기화를 요청하는 것이 아니라 몇 가지 특정 파일만 요청하기 때문에 DEST의 불필요한 파일은 삭제되지 않습니다. 원하는 결과를 얻으려면 다음을 시도해 보세요.

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

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

관련 정보