regex - 为什么 Google Cloud Builder 没有使用 gsutil rsync -x 排除文件?

标签 regex google-cloud-platform rsync google-cloud-build

我当前正在运行 gsutil rsync 云构建命令:

gcr.io/cloud-builders/gsutil
-m rsync -r -c -d -x "\.gitignore" . gs://mybucket/ 

我在这里使用 -x "\.gitignore" 参数来尝试不复制 .gitignore 文件,如下所述:

https://cloud.google.com/storage/docs/gsutil/commands/rsync

但是,当查看存储桶和日志时,它仍然显示:

2021-04-23T13:29:37.870382893Z 步骤 #1:复制 file://./.gitignore [Content-Type=application/octet-stream]...

因此,尽管有 -x "\.gitignore" 参数,rsync 仍在复制文件。

根据文档 -x 是一个 Python 正则表达式,因此 //./.gitignore 应该由 \.gitignore 捕获

enter image description here

有谁知道为什么这不起作用以及为什么文件仍在被复制?

最佳答案

请参阅rsync.py源代码:

if cls.exclude_pattern.match(str_to_check):

在 Python 中,re.match 仅返回出现在字符串开头的匹配项。

因此,为了使用 -x 参数在任何地方查找匹配项,您需要在需要查找的模式前添加 .* (?s).*:

gcr.io/cloud-builders/gsutil
-m rsync -r -c -d -x ".*\.gitignore" . gs://mybucket/ 

请注意,为了确保 .gitignore 出现在字符串末尾,您需要附加 $, -x ".*\.gitignore$".

关于regex - 为什么 Google Cloud Builder 没有使用 gsutil rsync -x 排除文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67230947/

相关文章:

regex - 如何在 Elixir 中使用 W3C 电子邮件正则表达式

java - GoogleCredential.getApplicationDefault() 不返回 GCE 实例凭证

python - 值得使用 Python 的 re.compile 吗?

javascript - 字符串 '<3' 和 ':)' 的正则表达式模式是什么?

google-cloud-platform - 如何编辑实例组中的实例后缀?

algorithm - rsync 算法中的滚动校验和

linux - 将子文件夹重命名为父文件夹,删除 'extra' 文件夹

shell - GNU 与 rsync 并行

java - 正则表达式。 (点)没有捕获字符串中的括号?

google-cloud-platform - 删除默认服务帐号后无法在 Dataproc 上创建集群