注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间的示例值。完成练习后,将这些值替换为特定于云环境的值。
从对象存储批量/批量删除对象
简介
有多种方法可以从对象存储删除对象。您可以通过控制台、CLI 或 API/SDK 执行单一对象删除操作。但是,删除大量对象时,问题变得非普通。本教程介绍了可用于批量/批量删除对象的以下方法:
- 通过 Oracle Cloud Infrastructure (OCI) CLI 进行批量/批量删除
- 通过对象生命周期管理 (OLM) 进行批量/批量删除
点到附注
请注意使用 OCI CLI 批量删除对象的以下几点:
-
如何实现批量删除命令?是同步操作还是异步操作?
批量删除命令是同步实现的,这意味着它通过在客户端发出单对象删除请求逐个删除对象。它不是异步服务器端操作。例如,考虑运行命令的情况,并且需要很长时间才能完成。如果在命令运行完成之前停止该命令,则实际上只会删除该命令要删除的某些对象。将有剩余的对象尚未处理/删除。
-
如何监视成批删除命令的进度?
运行成批删除命令后,您就可以立即看到该命令的进度。在您的终端中,将有一个包含
#
个字符的条形,然后旁边有一个百分比(请参见下面的示例)- 这是批量删除命令的进度。
请注意使用 OLM 批量删除对象的以下几点:
-
OLM 如何实现?是同步操作还是异步操作?
OLM 是一个异步操作,这意味着生命周期规则作业在后台运行,其实施背后具有各种细微差别。例如,最初只删除对象元数据,这意味着您可能看不到刚刚删除的对象。但在幕后,该对象的实际数据仍然存在于我们的存储服务器中,并将在以后被我们的内部垃圾收集服务删除/清理。从客户角度来看,如果删除了某个对象但在内部,这些数据仍存在于存储服务器中,等待清理 - 即,如果无法亲自看到对象(通过 CLI 或控制台),则不收取存储空间使用费。由于 OLM 是异步的,因此当规则在后台运行时,您可以对对象存储执行其他操作。
-
如何监视 OLM 生命周期规则的进度?
当前无法监视 OLM 生命周期规则的进度 - OLM 作业不会显示在工作请求中。也就是说,监测 OLM 规则进展的能力在我们的产品路线图中,并且将来可能可用。
-
我刚刚创建了一个生命周期规则。规则何时开始?
请记住,生命周期规则不会立即开始。例如,如果您为要删除超过 3 天的对象创建生命周期规则,并且存在超过 3 天的现有对象,则创建规则时不会立即删除它们。从创建规则到规则实际生效的延迟。我们可以期望该规则在 24 小时内生效(或至少开始生效)。
我应该使用哪种方法?
在实现中,批量/附加对象删除的两种方法的主要区别在于。要重申这一点,OCI CLI 批量删除命令在客户端同步实施,而在服务器端异步实施 OLM。一般来说,使用以下标准确定要使用的方法。
在以下情况下使用 CLI 批量删除: | 在以下情况下使用 OLM 批量删除: |
---|---|
删除可以同步进行(因为 CLI 是同步的) | 删除必须异步执行(因为 OLM 是异步的) |
一次性删除 | 应永远发生的重复删除 |
对象数量不多 | 对象数量众多 |
对象删除需要立即进行 | 对象删除可以等待(有短暂延迟) |
目标
- 了解以下方法从对象存储中删除大量对象:
- 通过 Oracle Cloud Infrastructure (OCI) CLI 进行批量/批量删除
- 通过对象生命周期管理 (OLM) 进行批量/批量删除
先决条件
- 请查看对象存储概述以基本了解对象存储。
- 请查看使用对象生命周期管理,以基本了解对象存储 OLM 功能。
- 查看命令行界面 (Command Line Interface,CLI) 以全面了解 OCI CLI 的工作原理。
方法 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 控制台创建。这可以通过单击存储桶并进入侧边的“生命周期策略规则”选项卡来完成。然后,应弹出一个对话框,允许用户配置其规则。
还可以通过 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"
}
]'
相关链接
致谢
- 作者 - Raymond Lin(软件工程师)
更多学习资源
在 docs.oracle.com/learn 上浏览其他实验室,或者在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Delete objects in bulk/batch from Object Storage
F74479-01
November 2022
Copyright © 2022, Oracle and/or its affiliates.