基于对象元数据进行筛选

本文将详细为您介绍如何通过ossutil根据对象的元数据进行过滤,筛选出您需要的内容。

使用场景

对于包含大量对象(Object)的Bucket,直接浏览或处理会非常耗时。因此,ossutil 2.0提供了一系列高效的基于元数据进行过滤的选项,允许用户根据特定元数据属性对Object进行精准筛选。

前提条件

元数据过滤

ossutil 2.0 支持基于Object元数据的精细化操作筛选,这一功能主要适用于多个高级命令,如 ls(列举资源)、cp(上传、下载、拷贝文件)和 rm(删除)。用户可以根据对象的特定元数据属性(如对象类型)进行筛选,提高效率。

参数说明

参数

类型

说明

--metadata-include

stringArray

指定需包含的元数据规则,即仅显示符合这些规则的Object。

--metadata-exclude

stringArray

指定需排除的元数据规则,符合条件的Object将不被显示。

--metadata-filter

stringArray

直接定义元数据过滤规则,支持更灵活的匹配逻辑。

--metadata-filter-from

stringArray

从外部文件读取元数据过滤规则,便于复杂规则的管理和复用。

  • 使用--metadata-include时,自动隐式追加一条排除所有其他类型文件的规则- **至列表末尾。

  • 使用 --metadata-filter "+ 规则" 添加包含规则时,不会自动添加所有的排除规则,即 --metadata-include "规则" 等于 --metadata-filter "+ 规则"+--metadata-filter "- **"。例如,若要精确筛选出bucket中的所有JPEG图像文件,需要设置为--metadata-filter "+ content-type=image/jpeg" --metadata-filter "- **"

  • 在处理多文件规则列表时,文件顺序遵循从左到右的规则执行,而每个文件内部的规则是按照自上而下顺序执行,并忽略空行及以#;开始的注释行。

  • 匹配到首个规则后,会停止后续的规则检查。

支持的元数据类型

  • 存储类型:采用x-oss-storage-class=value,value取值Standard、IA、Archive、ColdArchive、DeepColdArchive。

  • Object类型:采用x-oss-object-type=value,value取值Normal、Multipart、Appendable、Symlink。

  • 解冻恢复状态:采用x-oss-restore=value,value根据实际值填写。

  • Content-Type:采用 content-type=value,value根据实际值填写。

  • 用户自定义元数据:用户自定义元数据应遵循规范格式x-oss-meta-aaa=value,其中x-oss-meta-是固定前缀,表示用户自定义元数据的开始,而aaa部分允许您根据需求自定义键名,value根据实际值填写。例如x-oss-meta-location:hangzhou

示例

筛选特定存储类型的对象

  • 以下命令用于筛选examplebucket中存储类型为标准存储的对象。

    ossutil ls oss://examplebucket --metadata-include "x-oss-storage-class=Standard"
  • 以下命令用于筛选examplebucket中归档,冷归档和深度冷归档类型的对象。

    ossutil ls oss://examplebucket --metadata-include "x-oss-storage-class=*Archive"

筛选特定解冻状态的对象

参数

类型

示例值

描述

x-oss-restore

字符串

  • 正在解冻:ongoing-request="true"

  • 已解冻:ongoing-request="false", expiry-date="Thu, 04 Jan 2024 03:28:54 GMT"

您可以调用HeadObject接口并检查返回头x-oss-restore来获取解冻状态信息

  • 如果没有进行解冻操作,或者解冻操作已经超时,那么x-oss-restore字段不会返回。

  • 如果进行了解冻操作,但解冻未完成,x-oss-restore字段会显示ongoing-request="true"

  • 如果进行了解冻操作,且解冻完成,x-oss-restore字段将会显示ongoing-request="false",并且会包含一个expiry-date,它表示对象可读状态的截止时间。

  • 以下示例用于筛选examplebucket中正处于解冻状态的对象,其中**标识用来匹配任何时间。

    ossutil ls oss://examplebucket --metadata-include "x-oss-restore=ongoing-request=\"true\"**"
  • 以下示例用于筛选examplebucket中已经解冻完成的对象,其中**标识用来匹配任何时间。

    ossutil ls oss://examplebucket --metadata-include "x-oss-restore=ongoing-request=\"false\"**"

筛选特定元数据属性的对象

  • 以下命令用于筛选examplebucket中所有JPEG格式的图片文件,以便进行特定的操作或数据分析:

    ossutil ls oss://examplebucket --metadata-include "content-type=image/jpeg"
  • 以下命令用于筛选examplebucket中所有txt格式的文件,其后的*5.txt规则实际上不会产生额外效果:

    ossutil ls oss://examplebucket --metadata-include "*.txt"  --metadata-include "*5.txt"

筛选特定格式的对象

以下命令用于筛选examplebucket中所有JPEG格式的图片文件。使用--metadata-filter参数,并结合+-符号来指定包含和排除条件。将列出存储桶examplebucket中所有Content-Typeimage/jpeg的文件,而其他类型的文件将被排除在外。

ossutil ls oss://examplebucket --metadata-filter "+ content-type=image/jpeg" --metadata-filter "- **"

通过规则文件实现复杂条件筛选

当过滤条件较为复杂或者需要同时应用多个不同的过滤规则时,可以预先创建规则文件进行筛选。

以下规则文件metadata_filters.txt用于筛选出存储类型为标准存储的所有JPEG图片:

# rules file: metadata_filters.txt
+ content-type=image/jpeg
+ x-oss-storage-class=Standard
- **

使用--metadata-filter-from选项调用该规则文件来进行筛选:

ossutil ls oss://examplebucket --metadata-filter-from metadata_filters.txt