如何告诉 rsync 不要删除目的地的某些文件夹?

22d*_*bre 13 rsync

所以我使用 pelican 来写我的博客,并使用 rsync 上传整个内容。好的。

但我也使用 Let's Encrypt,因此需要将存储库 .well-known 保存在我网站的根目录中。

那么有没有办法我可以说“rsync ... --do-not-delete .well-known ...”

目前,那些代表受权限保护,但 rsync 不喜欢它。

这是当前的 rsync 命令(由 pelican 自己安装,我没有写):

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

顺便说一句:如果您还有一些提高 rsync 效率的建议,我会接受(是的,这与主题无关)。

Hai*_*ong 16

man rsync

--delete 这告诉 rsync 从接收方删除无关文件(不在发送方的文件),但仅用于正在同步的目录。您必须要求 rsync 发送整个目录(例如“dir”或“dir/”)而不使用目录内容的通配符(例如“dir/*”),因为通配符被 shell 展开,因此 rsync 得到一个请求传输单个文件,而不是文件的父目录。

所以我觉得应该是

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

(假设.well-known是在 的根$(SSH_TARGET_DIR)/


Cel*_*ada 8

您应该使用该--exclude选项来rsync忽略该目录。除非您也使用--delete-excluded(在这种情况下您不应该使用),否则它不会被使用。