我有一个部署脚本,它使用 rsync 和使用 .txt 文件进行合并的过滤器。如何包含 /web 中的所有内容,同时排除文件夹 /web/uploads?我正在使用 Bitbucket 管道进行部署。
--filter=merge ${BITBUCKET_CLONE_DIR}/bitbucket-pipelines-filter.txt
我尝试过以下规则:
+ /web/***
- /web/uploads
但出于某种原因,rsync 不断清空 uploads 文件夹,因为存储库中的该文件夹为空。其他一切都按预期进行。Web 文件夹中的所有文件均已正确上传。
答案1
包含/排除/过滤规则从左到右应用(或在文件中,从上到下)。因此“包括其中的所有内容/web
,但排除文件夹/web/uploads
“您需要uploads
在包含其他所有内容之前排除。并且由于的默认操作rsync
是包含所有内容,因此您实际上不需要指定:
rsync --dry-run -avP --exclude '/web/uploads/' /from/path/ rHost:/to/path
开头的/
on/web/uploads/
将模式与正在传输的树的顶部联系起来。(在本例中,该树的顶部是目录/from/path/web/uploads
。)结尾的 on/
将该模式声明为目录。