使用通配符过滤源对象

Storage Transfer Service 作业支持使用 *? 等通配符的搜索字符串来匹配文件名或路径。这些搜索字符串称为 glob 模式。

您可以使用 glob 模式来指定要在转移中包含哪些源对象。与仅按前缀过滤相比,这样可以实现更精细的控制。

支持使用 glob 模式过滤从 AWS S3 和 Azure 转移的数据。

Glob 语法

glob 模式使用以下语法来匹配对象路径:

语法 说明
? 匹配除 / 以外的任何单个字符。
* 匹配零个或更多个字符,但不包括 /
** 匹配零个或多个字符,包括 /
[abc] 匹配一个字符(例如 abc)。
[a-z] 匹配包含范围(例如,az)中的一个字符。
[!abc][^abc] 匹配一个不是 abc 的字符。
{abc,xyz} 与其中一个字符串(例如 abcxyz)匹配。不得包含正斜杠 (/) 或双星号 (**)。
\? 匹配反斜线后面的字面量字符(例如,\? 匹配字面量 ?)。

示例格式

匹配 december 目录中的所有 .log 文件:

logs_by_year/**/december/*.log

转移 data_analytics/ 目录中不以 .(点)或 _(下划线)开头的所有文件:

data_analytics/[!._]*

如需使上一个示例具有递归性,请执行以下操作:

data_analytics/**/[!._]*

从两个特定目录中转移所有 PDF 文件:

quarterly_reports/2025/{q1-final,q4-final}/*.pdf

指定 glob 模式

您可以在创建或更新转移作业时指定 Glob 模式。

gcloud CLI

如需使用 gcloud CLI 按 glob 模式进行过滤,请将 --match-glob 标志传递给 gcloud transfer jobs creategcloud transfer jobs update 命令:

gcloud transfer jobs create SOURCE DESTINATION \
  --match-glob="GLOB_PATTERN"

示例

以下命令会创建一个作业,用于仅从 december 目录转移 .log 文件:

gcloud transfer jobs create s3://my-source-bucket gs://my-sink-bucket \
  --match-glob="logs_by_year/**/december/*.log"

REST

如需使用 REST API 按 glob 模式进行过滤,请在 transferSpecobjectConditions 中指定 matchGlob 字段。

{
  "description": "Transfer December logs from all years",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "awsS3DataSource": {
      "bucketName": "AWS_SOURCE_NAME",
      "awsAccessKey": {
        "accessKeyId": "AWS_ACCESS_KEY_ID",
        "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
      }
    },
    "gcsDataSink": {
      "bucketName": "DESTINATION_BUCKET"
    },
    "objectConditions": {
      "matchGlob": "logs_by_year/**/december/*.log"
    }
  }
}

如需了解详情,请参阅 ObjectConditions 参考文档。

Google Cloud 控制台

Google Cloud 控制台不支持按 glob 模式进行过滤。

与其他过滤器的互动

将 glob 模式过滤条件与前缀过滤条件或上次修改时间过滤条件搭配使用时,Storage Transfer Service 会按以下顺序应用过滤条件:

  1. 包含前缀:缩小要考虑的对象的范围。

  2. 对象条件(glob 模式和上次修改时间):过滤与包含前缀匹配的对象。对象必须同时满足 glob 过滤条件和上次修改时间过滤条件,才能包含在结果中。

  3. 排除前缀:从结果中移除对象。

详细了解如何按前缀过滤按最后修改时间过滤

包含前缀

glob 模式仅适用于至少与一个 include 前缀匹配的对象。

如果您的 glob 模式与所有包含前缀模式相矛盾,Storage Transfer Service 会返回错误。

示例:有效组合

  • include_prefix["foo/"]
  • match_glob"foo/bar/**"

结果:有效。该服务首先列出 foo/ 下的对象,然后对该列表应用 glob 模式。

示例:有效组合

  • include_prefix["logs/2024/", "logs/2025/"]
  • match_glob"**/*.json"

结果:有效。该服务会列出 20242025 目录中的所有对象,然后仅转移以 .json 结尾的文件。

示例:矛盾

  • include_prefix["foo/"]
  • match_glob"bar/**"

结果:错误。match_glob 模式无法匹配 include_prefix 选择的任何对象。

排除前缀

排除前缀过滤条件是在包含前缀过滤条件和 glob 模式过滤条件之后应用的。

不执行矛盾检查。与排除前缀匹配的任何对象都会从转移列表中移除,即使该对象与 glob 模式匹配也是如此。

示例

  • include_prefix["logs/"]
  • match_glob"**/*.log"
  • exclude_prefix["logs/temp/"]

结果:该服务会转移 logs/ 下以 .log 结尾的所有对象, logs/temp/ 目录中的对象除外。