所以我使用 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
(在本例中您不应该使用),否则它将不理会它。