rsync에게 대상의 특정 폴더를 삭제하지 않도록 지시하는 방법은 무엇입니까?

rsync에게 대상의 특정 폴더를 삭제하지 않도록 지시하는 방법은 무엇입니까?

그래서 펠리칸을 사용해 블로그를 작성하고 rsync를 사용해 전체 콘텐츠를 업로드합니다. 좋아요

하지만 저는 Let's Encrypt도 사용하므로 웹 사이트 루트에 .well-known 저장소를 유지해야 합니다.

"rsync ... --do-not-delete .well-known ..."이라고 말할 수 있는 방법이 있나요?

현재 이러한 대리인은 권한이 보호되어 있지만 rsync는 이를 좋아하지 않습니다.

이것은 현재 rsync 명령입니다(내가 작성한 것이 아니라 펠리칸 자체에 의해 설치됨).

rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude

참고: rsync 효율성을 개선하기 위한 몇 가지 제안 사항이 있다면 이를 수락하겠습니다(예, 주제에서 벗어났습니다).

답변1

~에서man rsync

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

그래서 나는 그래야 한다고 생각한다.

rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete \
$(OUTPUTDIR)/ \
$(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) \
--cvs-exclude --exclude=/.well-known

( .well-known의 루트를 가정 $(SSH_TARGET_DIR)/)

답변2

--exclude이 디렉터리를 무시 하려면 이 옵션을 사용해야 합니다 rsync. 또한 사용하지 않는 한 이를 무시합니다 --delete-excluded(이 경우에는 사용하지 않아야 함).

관련 정보