本页面介绍如何使用包含和排除前缀在转移作业中包含路径以及从转移作业中排除路径。
如需了解如何创建要转移的特定对象的清单,请参阅使用清单转移特定文件或对象。
概览
Storage Transfer Service 支持使用前缀来选择要在数据源中包含哪些文件或者从数据源中排除哪些文件。您可以使用包含前缀和/或排除前缀。
Amazon S3、Microsoft Azure Blob Storage 和 Cloud Storage 数据源支持按前缀过滤。
请勿在前缀开头添加斜杠。例如,要在转移来自以下存储桶路径
s3://my-aws-bucket/logs/y=2015/requests.gz
的数据时包含requests.gz
对象,请将包含前缀指定为logs/y=2015/requests.gz
。包含和排除前缀支持部分匹配。例如,
path
与path_1/
和path_2/
匹配。不支持通配符。
如果您将某个文件夹指定为源位置,则前缀过滤器是相对于该文件夹的。例如,如果您的来源是
gs://my-test-bucket/path/
,则file
的 include 过滤条件会包含以gs://my-test-bucket/path/file
开头的所有文件。每个 include 前缀都必须包含对象命名空间的不同部分。任何 include 前缀都不能是另一个 include 前缀的前缀。例如,您不能同时指定
path_1
和path_1/subpath_2
作为包含前缀。如果同时使用包含前缀和排除前缀,则排除前缀必须以其中一个包含前缀的值开头。例如,如果指定
a
作为包含前缀,则有效的排除前缀为a/b
、aaa
和abc
。如果单独使用排除前缀,可以使用的前缀则不受限制。
如果未指定任何前缀,则将传输存储桶中的所有对象。
如需了解有关前缀的更多常规信息,请参阅 Amazon S3 文档中的使用前缀和分隔符分层列出密钥或 Cloud Storage 的对象 list 方法。
如何指定前缀
Cloud 控制台
gcloud CLI
如需使用 gcloud
CLI 指定包含和排除前缀,请将 --include-prefixes
和 --exclude-prefixes
标志传递给 gcloud transfer jobs create
命令或 gcloud transfer jobs update
命令:
gcloud transfer jobs create SOURCE DESTINATION \
--include-prefixes="path_1/,path_2/" --exclude-prefixes="path_1/subpath_2/"
请使用英文逗号分隔多个前缀,并省略英文逗号后面的空格。例如 --include-prefixes=foo,bar
。
REST
如需使用 REST API 指定包含和排除前缀,请使用 includePrefixes[]
和 excludePrefixes[]
字段:
{
"description": "YOUR DESCRIPTION",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"schedule": {
"scheduleStartDate": {
"day": 1,
"month": 1,
"year": 2015
},
"startTimeOfDay": {
"hours": 1,
"minutes": 1
}
},
"transferSpec": {
"gcsDataSource": {
"bucketName": "GCS_SOURCE_NAME"
},
"gcsDataSink": {
"bucketName": "GCS_SINK_NAME"
},
"transferOptions": {
"deleteObjectsFromSourceAfterTransfer": true
},
"objectConditions": {
"includePrefixes": [
"path_1/",
"path_2/"
],
"excludePrefixes": [
"path_1/subpath_2/object_5"
]
}
}
}
如需了解详情,请参阅 ObjectConditions
参考文档。
对象和路径示例
本文档中的示例使用以下对象和路径示例:
xx://bucketname/object_1
xx://bucketname/object_2
xx://bucketname/path_1/object_3
xx://bucketname/path_2/object_4
xx://bucketname/path_1/subpath_1/object_5
xx://bucketname/path_1/subpath_2/object_6
xx://bucketname/path_2/subpath_3/object_7
xx://bucketname/path_2/subpath_4/object_8
添加前缀
在创建转移作业时使用包含前缀,指示 Storage Transfer Service 转移所列路径下的对象,并忽略不在这些路径下的对象。
例如,要包含 path_1/
下的对象,请使用以下前缀:
path_1/
这将包含直接位于 path_1/
、path_1/subpath_1
和 path_1/subpath_2/
下的对象。转移作业将包含以下对象:
xx://bucketname/object_1xx://bucketname/object_2xx://bucketname/path_1/object_3xx://bucketname/path_2/object_4xx://bucketname/path_1/subpath_1/object_5 xx://bucketname/path_1/subpath_2/object_6xx://bucketname/path_2/subpath_3/object_7xx://bucketname/path_2/subpath_4/object_8
您可以指定要包含的多个路径。例如,您可以传递以下内容:
path_1/subpath_2/ path_1/subpath_3/
在本例中,转移作业包含以下对象:
xx://bucketname/object_1xx://bucketname/object_2xx://bucketname/path_1/object_3xx://bucketname/path_2/object_4xx://bucketname/path_1/subpath_1/object_5xx://bucketname/path_1/subpath_2/object_6 xx://bucketname/path_2/subpath_3/object_7xx://bucketname/path_2/subpath_4/object_8
支持部分匹配。例如,将 path
指定为包含前缀的值会与以下对象匹配:
xx://bucketname/object_1xx://bucketname/object_2xx://bucketname/path_1/object_3 xx://bucketname/path_2/object_4 xx://bucketname/path_1/subpath_1/object_5 xx://bucketname/path_1/subpath_2/object_6 xx://bucketname/path_2/subpath_3/object_7 xx://bucketname/path_2/subpath_4/object_8
使用包含前缀时,未明确包含的路径不会转移到 Cloud Storage 目标存储桶。
排除前缀
创建转移作业时,使用排除前缀指示 Storage Transfer Service 忽略列出的转移作业路径。
如需排除 path_1/
下的对象,请传递以下前缀:
path_1/
这将排除 path_1/
、path_1/subpath_1/
和 path_1/subpath_2/
下的对象。在本例中,以下对象将包含在转移作业中:
xx://bucketname/object_1 xx://bucketname/object_2xx://bucketname/path_1/object_3xx://bucketname/path_2/object_4xx://bucketname/path_1/subpath_1/object_5xx://bucketname/path_1/subpath_2/object_6xx://bucketname/path_2/subpath_3/object_7 xx://bucketname/path_2/subpath_4/object_8
您可以指定要排除的多个路径。例如,您可以传递以下内容:
path_1/subpath_2/
path_2/subpath_3/
在本例中,转移作业包含以下对象:
xx://bucketname/object_1 xx://bucketname/object_2 xx://bucketname/path_1/object_3 xx://bucketname/path_2/object_4 xx://bucketname/path_1/subpath_1/object_5xx://bucketname/path_1/subpath_2/object_6xx://bucketname/path_2/subpath_3/object_7xx://bucketname/path_2/subpath_4/object_8
同时包含和排除路径
您可以同时应用排除前缀和包含前缀,在这种情况下,排除前缀会限制包含前缀在转移作业中包含的内容。
同时指定这两种类型的前缀时,每个排除前缀都必须以包含前缀中指定的路径开头。
例如,要包含 path_1/
下的对象并排除 subpath_1/
下的对象,请传递以下内容:
include: path_1/
exclude: path_1/subpath_1/
在本例中,转移作业包含以下对象:
xx://bucketname/object_1xx://bucketname/object_2xx://bucketname/path_1/object_3xx://bucketname/path_2/object_4xx://bucketname/path_1/subpath_1/object_5xx://bucketname/path_1/subpath_2/object_6xx://bucketname/path_2/subpath_3/object_7xx://bucketname/path_2/subpath_4/object_8
如需包含 path_1/
和 path_2/
下的所有对象(path_1/subpath_1/
或 path_2/subpath_3/
中的项除外),请传递以下内容:
include: path_1/
path_2/
exclude: path_1/subpath_1/
path_2/subpath_3/
在本例中,转移作业包含以下对象:
xx://bucketname/object_1xx://bucketname/object_2xx://bucketname/path_1/object_3 xx://bucketname/path_2/object_4xx://bucketname/path_1/subpath_1/object_5xx://bucketname/path_1/subpath_2/object_6xx://bucketname/path_2/subpath_3/object_7xx://bucketname/path_2/subpath_4/object_8
错误的路径包含或排除示例
以下部分介绍了使用包含或排除路径时应避免的案例,以及您应如何更正这些案例以使该功能正常工作。
包含另一个包含前缀中使用的路径
每个 include 前缀都应指定对象命名空间的不同部分。以下示例不正确,因为第二个值已包含在第一个值的命名空间中:
include: path_1/
path_1/subpath_1
在此示例中,包含前缀值无效,因为第二个包含前缀 path_1/subpath_1
已包含在 path_1/
中。如需解决此问题,请移除其中一个值。
使用不以包含前缀开头的排除前缀
每个排除前缀都应以任何指定的包含前缀值开头。以下示例不正确,因为排除前缀值不是以指定的包含前缀值开头:
include: path_1/
path_2/
exclude: subpath_1
subpath_4
在此示例中,排除前缀值无效,因为它们没有以任何包含前缀值开头。如需解决此问题,请确保排除前缀包含列为包含前缀的完整路径:
include: path_1/
path_2/
exclude: path_1/subpath_1/
path_2/subpath_4/
后续步骤
- 了解如何转移特定文件列表或对象列表。