![rsync에게 대상의 특정 폴더를 삭제하지 않도록 지시하는 방법은 무엇입니까?](https://linux55.com/image/6654/rsync%EC%97%90%EA%B2%8C%20%EB%8C%80%EC%83%81%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%ED%8F%B4%EB%8D%94%EB%A5%BC%20%EC%82%AD%EC%A0%9C%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8F%84%EB%A1%9D%20%EC%A7%80%EC%8B%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
그래서 펠리칸을 사용해 블로그를 작성하고 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
(이 경우에는 사용하지 않아야 함).