使用 rsync 包含文件夹内的所有文件和文件夹并排除特定的子文件夹

使用 rsync 包含文件夹内的所有文件和文件夹并排除特定的子文件夹

我有一个部署脚本,它使用 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/将该模式声明为目录。

相关内容