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

如何告诉 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

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

答案1

man rsync

--delete 这告诉 rsync 从接收端删除无关的文件(不在发送端的文件),但仅限于正在同步的目录。您必须要求 rsync 发送整个目录(例如“dir”或“dir/”),而不使用目录内容的通配符(例如“dir/*”),因为通配符由 shell 扩展,因此 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(在本例中您不应该使用),否则它将不理会它。

相关内容