按前缀过滤

本页面介绍如何使用包含和排除前缀在转移作业中包含路径以及从转移作业中排除路径。

如需了解如何创建要转移的特定对象的清单,请参阅使用清单转移特定文件或对象

概览

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

  • 包含和排除前缀支持部分匹配。例如,pathpath_1/path_2/ 匹配。

  • 不支持通配符。

  • 如果您将某个文件夹指定为源位置,则前缀过滤器是相对于该文件夹的。例如,如果您的来源是 gs://my-test-bucket/path/,则 file 的 include 过滤条件会包含以 gs://my-test-bucket/path/file 开头的所有文件。

  • 每个 include 前缀都必须包含对象命名空间的不同部分。任何 include 前缀都不能是另一个 include 前缀的前缀。例如,您不能同时指定 path_1path_1/subpath_2 作为包含前缀。

  • 如果同时使用包含前缀和排除前缀,则排除前缀必须以其中一个包含前缀的值开头。例如,如果指定 a 作为包含前缀,则有效的排除前缀为 a/baaaabc

  • 如果单独使用排除前缀,可以使用的前缀则不受限制。

  • 如果未指定任何前缀,则将传输存储桶中的所有对象。

如需了解有关前缀的更多常规信息,请参阅 Amazon S3 文档中的使用前缀和分隔符分层列出密钥或 Cloud Storage 的对象 list 方法

如何指定前缀

Cloud 控制台

如需使用 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_1path_1/subpath_2/ 下的对象。转移作业将包含以下对象:

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

您可以指定要包含的多个路径。例如,您可以传递以下内容:

path_1/subpath_2/
path_1/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_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

支持部分匹配。例如,将 path 指定为包含前缀的值会与以下对象匹配:

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

使用包含前缀时,未明确包含的路径不会转移到 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_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

您可以指定要排除的多个路径。例如,您可以传递以下内容:

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_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

同时包含和排除路径

您可以同时应用排除前缀和包含前缀,在这种情况下,排除前缀会限制包含前缀在转移作业中包含的内容。

同时指定这两种类型的前缀时,每个排除前缀都必须以包含前缀中指定的路径开头。

例如,要包含 path_1/ 下的对象并排除 subpath_1/ 下的对象,请传递以下内容:

include: path_1/
exclude: path_1/subpath_1/

在本例中,转移作业包含以下对象:

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

如需包含 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_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

错误的路径包含或排除示例

以下部分介绍了使用包含或排除路径时应避免的案例,以及您应如何更正这些案例以使该功能正常工作。

包含另一个包含前缀中使用的路径

每个 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/

后续步骤