注意:

从对象存储批量/批量删除对象

简介

有多种方法可以从对象存储删除对象。您可以通过控制台、CLI 或 API/SDK 执行单一对象删除操作。但是,删除大量对象时,问题变得非普通。本教程介绍了可用于批量/批量删除对象的以下方法:

点到附注

请注意使用 OCI CLI 批量删除对象的以下几点

请注意使用 OLM 批量删除对象的以下几点

我应该使用哪种方法?

在实现中,批量/附加对象删除的两种方法的主要区别在于。要重申这一点,OCI CLI 批量删除命令在客户端同步实施,而在服务器端异步实施 OLM。一般来说,使用以下标准确定要使用的方法。

在以下情况下使用 CLI 批量删除: 在以下情况下使用 OLM 批量删除:
删除可以同步进行(因为 CLI 是同步的) 删除必须异步执行(因为 OLM 是异步的)
一次性删除 应永远发生的重复删除
对象数量不多 对象数量众多
对象删除需要立即进行 对象删除可以等待(有短暂延迟)

目标

先决条件

方法 1:通过 OCI CLI 批量/批中删除对象

您可以使用以下任一方法从 OCI CLI 中批量删除对象。

删除存储桶中的批量对象

可以使用 OCI CLI 通过以下命令批量删除存储桶中的对象:

oci os object bulk-delete -bn <bucket_name>

注:如果您不想运行删除操作,但只想查看将删除哪些对象的计划,则可以使用 --dry-run 选项。

oci os object bulk-delete -bn <bucket_name> --dry-run
{
  "delete-failures": {},
  "deleted-objects": [
    "1000_sales.csv",
    "rick_and_morty.json"
  ]
}

按前缀批量删除对象

通过添加 --prefix 选项,可以仅指定删除与特定前缀匹配的对象。以下命令将删除与前缀 <some_prefix> 匹配的所有对象。

oci os object bulk-delete -bn <bucket_name> --prefix <some_prefix>

例如,如果要删除与前缀 "rick" 匹配的对象,请使用以下命令:

oci os object bulk-delete -bn test-bucket-1 --prefix rick
WARNING: This command will delete at least 1 objects. Are you sure you wish to continue? [y/N]: y
Deleted object rick_and_morty.json  [####################################]  100%
{
    "delete-failures": {},
    "deleted-objects": [
    "rick_and_morty.json"
    ]
}

按模式成批删除对象(包含)

通过添加 --include 选项,可以仅指定删除与特定模式匹配的对象。以下命令将删除与模式 <some_pattern> 匹配的所有对象。

oci os object bulk-delete -bn <bucket_name> --include <some_pattern>

例如,如果只要删除 JSON 文件类型的对象,请使用以下命令:

oci os object bulk-delete -bn test-bucket-1 --include "*.json"
WARNING: This command will delete at least 1 objects. Are you sure you wish to continue? [y/N]: y
Deleted object rick_and_morty.json  [####################################]  100%
{
    "delete-failures": {},
    "deleted-objects": [
    "rick_and_morty.json"
    ]
}

通过反向模式成批删除对象(排除)

通过添加 --exclude 选项,可以指定仅删除与特定模式不匹配的对象。以下命令将删除与模式 <some_pattern> 匹配的所有对象。

oci os object bulk-delete -bn <bucket_name> --exclude <some_pattern>

例如,如果要删除除 JSON 文件类型之外的所有对象,请使用以下命令:

oci os object bulk-delete -bn test-bucket-1 --exclude "*.json"
WARNING: This command will delete at least 1 objects. Are you sure you wish to continue? [y/N]: y
Deleted object 1000_sales.csv  [####################################]  100%  
{
    "delete-failures": {},
    "deleted-objects": [
    "1000_sales.csv"
    ]
}

方法 2:通过 OLM 批量/批中删除对象

除了 OCI CLI 之外,您还可以使用 OLM - 对象生命周期管理 - 用于批量删除对象的功能。OLM 功能允许您创建生命周期规则,这些规则指定满足特定条件时要执行的操作。例如,可以指定超过 30 天要删除的对象。

在 OCI 控制台/CLI 上创建批量删除生命周期规则

生命周期规则可以通过 OCI 控制台创建。这可以通过单击存储桶并进入侧边的“生命周期策略规则”选项卡来完成。然后,应弹出一个对话框,允许用户配置其规则。

“Create Lifecycle Rule Console(创建生命周期规则控制台)”对话框

还可以通过 OCI CLI 创建生命周期规则。以下命令是使用 OCI CLI 创建生命周期规则的示例。此规则将删除超过 10 天的所有对象。

oci os object-lifecycle-policy put --bucket-name test-bucket-1 --items '[
    {
        "action": "DELETE",
        "isEnabled": true,
        "name": "lifecycle-rule-delete-all",
        "target": "objects",
        "timeAmount": 10,
        "timeUnit": "DAYS"
    }
]'

按前缀创建批量删除生命周期规则

在 OCI 控制台中,您可以根据特定条件为要删除的对象指定对象名称筛选器。可以处理对象名称前缀匹配。下面的屏幕截图显示了一个生命周期规则,该规则将删除前缀为 test/ 的所有对象。

创建生命周期规则控制台前缀

与控制台类似,OCI CLI 还可以通过前缀匹配指定要删除的对象。

oci os object-lifecycle-policy put --bucket-name <test_bucket> --items '[
    {
        ...
        "objectNameFilter": {
            "exclusionPatterns": [],
            "inclusionPatterns": [],
            "inclusionPrefixes": [
                <some_prefix>
            ]
        },
        ...
    }
]'

例如,以下 OCI CLI 命令创建/更新生命周期规则,该规则将删除前缀为 test/ 的所有对象。请记住,–-items 选项的参数必须是有效的 JSON 列表。

oci os object-lifecycle-policy put --bucket-name test-bucket-1 --items '[
    {
        "action": "DELETE",
        "isEnabled": true,
        "name": "lifecycle-rule-delete-all",
        "objectNameFilter": {
            "exclusionPatterns": [],
            "inclusionPatterns": [],
            "inclusionPrefixes": [
                "test/"
            ]
        },
        "target": "objects",
        "timeAmount": 10,
        "timeUnit": "DAYS"
    }
]'

按模式匹配创建批量删除生命周期规则(包含)

在 OCI 控制台中,您可以指定对象名称筛选器以按模式匹配(包括)删除对象。下面的屏幕截图显示了将删除所有 .doc 文件类型的生命周期规则。

创建生命周期规则控制台模式包括

您还可以从 OCI CLI 中仅删除与特定模式匹配的文件。

oci os object-lifecycle-policy put --bucket-name <bucket_name> --items '[
    {
        ...
        "objectNameFilter": {
            "exclusionPatterns": [],
            "inclusionPatterns": [
                <some_pattern>
            ],
            "inclusionPrefixes": []
        },
        ...
    }
]'

例如,以下 OCI CLI 命令创建/更新将删除所有 .doc 文件类型的生命周期规则。

oci os object-lifecycle-policy put --bucket-name test-bucket-1 --items '[
    {
        "action": "DELETE",
        "isEnabled": true,
        "name": "lifecycle-rule-delete-all",
        "objectNameFilter": {
            "exclusionPatterns": [],
            "inclusionPatterns": [
                "*.doc"
            ],
            "inclusionPrefixes": []
        },
        "target": "objects",
        "timeAmount": 10,
        "timeUnit": "DAYS"
    }
]'

通过逆模式匹配创建批量删除生命周期规则(排除)

在 OCI 控制台中,您可以通过反向模式匹配(排除)指定对象名称筛选器来删除对象,也就是删除所有对象(与模式匹配的对象除外)。下面的屏幕截图显示了生命周期规则,该规则将删除除 .txt 文件类型以外的所有内容。

创建生命周期规则控制台模式排除

您还可以从 OCI CLI 中删除除与特定模式匹配的所有文件。

oci os object-lifecycle-policy put --bucket-name <bucket_name> --items '[
    {
        ...
        "objectNameFilter": {
            "exclusionPatterns": [
                <some_pattern>
            ],
            "inclusionPatterns": [],
            "inclusionPrefixes": []
        },
        ...
    }
]'

例如,以下 OCI CLI 命令创建/更新生命周期规则,该规则将删除除 .txt 文件类型之外的每个对象。

oci os object-lifecycle-policy put --bucket-name test-bucket-1 --items '[
    {
        "action": "DELETE",
        "isEnabled": true,
        "name": "lifecycle-rule-delete-all",
        "objectNameFilter": {
            "exclusionPatterns": [
                "*.txt"
            ],
            "inclusionPatterns": [],
            "inclusionPrefixes": []
        },
        "target": "objects",
        "timeAmount": 10,
        "timeUnit": "DAYS"
    }
]'

致谢

更多学习资源

docs.oracle.com/learn 上浏览其他实验室,或者在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心