Storage Transfer Service 作业支持使用 * 和 ? 等通配符的搜索字符串来匹配文件名或路径。这些搜索字符串称为 glob 模式。
您可以使用 glob 模式来指定要在转移中包含哪些源对象。与仅按前缀过滤相比,这样可以实现更精细的控制。
支持使用 glob 模式过滤从 AWS S3 和 Azure 转移的数据。
Glob 语法
glob 模式使用以下语法来匹配对象路径:
| 语法 | 说明 |
|---|---|
? |
匹配除 / 以外的任何单个字符。 |
* |
匹配零个或更多个字符,但不包括 /。 |
** |
匹配零个或多个字符,包括 /。 |
[abc]
|
匹配一个字符(例如 a、b 或 c)。 |
[a-z]
|
匹配包含范围(例如,a 到 z)中的一个字符。 |
[!abc] 或 [^abc]
|
匹配一个不是 a、b 或 c 的字符。 |
{abc,xyz}
|
与其中一个字符串(例如 abc 或 xyz)匹配。不得包含正斜杠 (/) 或双星号 (**)。 |
\?
|
匹配反斜线后面的字面量字符(例如,\? 匹配字面量 ?)。 |
示例格式
匹配 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 create 或 gcloud 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 模式进行过滤,请在 transferSpec 的 objectConditions 中指定 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 会按以下顺序应用过滤条件:
包含前缀:缩小要考虑的对象的范围。
对象条件(glob 模式和上次修改时间):过滤与包含前缀匹配的对象。对象必须同时满足 glob 过滤条件和上次修改时间过滤条件,才能包含在结果中。
排除前缀:从结果中移除对象。
包含前缀
glob 模式仅适用于至少与一个 include 前缀匹配的对象。
如果您的 glob 模式与所有包含前缀模式相矛盾,Storage Transfer Service 会返回错误。
示例:有效组合
include_prefix:["foo/"]match_glob:"foo/bar/**"结果:有效。该服务首先列出
foo/下的对象,然后对该列表应用 glob 模式。
示例:有效组合
include_prefix:["logs/2024/", "logs/2025/"]match_glob:"**/*.json"结果:有效。该服务会列出
2024和2025目录中的所有对象,然后仅转移以.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/目录中的对象除外。