文件元數據是對文件(Object)的屬性描述,包括HTTP標準屬性(HTTP Header)和用戶自定義元數據(User Meta)兩種。其中,HTTP Header可用于自定義HTTP請求的策略,用戶自定義元數據可用于標識文件的用途或屬性等。您可以通過set-meta命令為已上傳的文件(Object)設置、修改或者刪除文件元數據。
注意事項
要為單個文件設置元數據,您必須具有
oss:GetObject
、oss:PutObject
、oss:GetObjectVersion
和oss:GetObjectAcl
權限;要批量為文件設置元數據,您必須具有oss:GetObject
、oss:PutObject
、oss:GetObjectVersion
和oss:ListObjects
權限。具體操作,請參見為RAM用戶授權自定義的權限策略。從ossutil 1.6.16版本開始,命令行中Binary名稱支持直接使用ossutil,您無需根據系統刷新Binary名稱。如果您的ossutil版本低于1.6.16,則需要根據系統刷新Binary名稱。更多信息,請參見命令行工具ossutil命令參考。
通過set-meta命令設置或更新文件元數據后,您可以通過stat命令查看文件元數據。更多信息,請參見stat。
命令格式
ossutil set-meta oss://bucketname[/prefix]
[header:value#header:value...]
[--update]
[--delete]
[-r,--recursive]
[-f, --force]
[--object-file, <value>]
[--snapshot-path, <value>]
[--disable-ignore-error]
[--version <value>]
[--include <value>]
[--exclude <value>]
參數及選項說明如下:
配置項 | 說明 |
bucketname | Bucket名稱。 |
prefix | Bucket下的資源,例如目錄、文件等。 |
header:value#header:value... | 以鍵值對的形式標識元數據。其中,Header不區分大小寫,但Value區分大小寫。如果需要設置多組元數據,則各組元數據之間以井號(#)連接。例如 當前可選的Header列表如下:
關于Header的用法,請參見管理文件元數據。 |
--update | 更新文件元數據。該選項可簡寫為-u,且不能與--delete選項同時使用。 |
--delete | 刪除文件元數據。該選項不能與--update選項同時使用。 |
-r,--recursive | 如果指定該選項時,ossutil將為所有與prefix匹配的文件設置元數據。如果不指定該選項,則ossutil只為指定文件設置元數據。 |
-f, --force | 強制操作,不進行詢問提示。 |
--object-file | 該選項用于批量設置、更新或刪除多個Object的元數據。使用該選項的步驟如下:
說明 當其中一個Object操作出現錯誤時,ossutil會將該Object的錯誤信息記錄到report文件,并繼續設置其他Object的元數據。成功操作的Object信息不會被記錄到report文件中。 |
--snapshot-path | 如果指定該選項,則只對本次操作的Object生成快照。如果操作的Object已經存在快照信息,則忽略本次操作。 說明 該選項需結合-r,--recursive或--object-file選項使用。 |
--disable-ignore-error | 批量操作時不忽略錯誤。 |
--version-id | Object的指定版本。僅適用于已開啟或暫停版本控制狀態Bucket下的Object。 |
--include | 包含符合指定條件的所有Object。 更多信息,請參見include和exclude選項。 |
--exclude | 不包含任何符合指定條件的Object。 更多信息,請參見include和exclude選項。 |
設置或更新元數據
在以下未包含--update選項的使用示例中,如果未指定header:value#header:value...選項,則僅保留以X-Oss-Meta-
開頭的自定義元數據,且不更改其Value值。對于HTTP Header信息,ossutil將進入交互模式并要求您確認是否繼續保留。
示例一:為單個Object設置或更新元數據
將examplebucket中exampleobject.txt的讀寫權限設置為私有(private)。
ossutil set-meta oss://examplebucket/exampleobject.txt X-Oss-Object-Acl:private
將examplebucket中exampleobject.txt的指定版本存儲類型(X-Oss-Storage-Class)設置為標準存儲(Standard)。
ossutil set-meta oss://examplebucket/exampleobject.txt X-Oss-Storage-Class:Standard --version-id CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE3MDRk
將examplebucket中exampleobject.txt的指定版本存儲類型(X-Oss-Storage-Class)設置為冷歸檔存儲(ColdArchive)。
ossutil set-meta oss://examplebucket/exampleobject.txt X-Oss-Storage-Class:ColdArchive --version-id CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE3MDRk
說明set-meta執行期間,存儲類型不會變化。執行完成后,存儲類型才會變化。
有關獲取Object版本的具體操作,請參見ls。
將examplebucket中exampleobject.txt的讀寫權限ACL更新為公共讀(public-read)。
ossutil set-meta oss://examplebucket/exampleobject.txt X-Oss-Object-Acl:public-read --update
使用--update選項時僅更新目標Object中與指定Header匹配的元數據,并替換為該Header對應的Value值,其中Value值可以為空。Value置空時,表示保留原有的Value信息。例如,該示例表示僅將名為exampleobject.txt的Object的讀寫權限更新為public-read,Object的其他元數據保留不變。
示例二:為相同目錄下的多個Object批量設置或更新元數據
為多個Object同時設置或修改元數據時,如果其中一個Object操作出現錯誤,ossutil會將該Object的錯誤信息記錄到ossutil_output目錄下的report文件中。成功操作的Object信息不會記錄到該report文件。
為與指定前綴匹配的Object設置元數據
結合-r選項,將examplebucket中與指定前綴src匹配的所有Object的緩存行為(Cache-Control)修改為no-cache(不直接使用緩存),讀寫權限(x-oss-object-acl)修改為private(私有)。
ossutil set-meta oss://examplebucket/src Cache-Control:no-cache#X-Oss-Object-Acl:private -r
為與指定過濾條件匹配的Object修改元數據
結合-r及-u選項,將examplebucket中目錄desfolder下所有文件類型為.jpg的Object的存儲類型修改為低頻訪問類型(IA)。
ossutil set-meta oss://examplebucket/desfolder/ X-Oss-Storage-Class:IA --include "*.jpg" -u -r
結合-r及-u選項,將examplebucket中目錄desfolder下文件名包含abc且文件類型不為.jpg和.txt的Object的存儲類型修改為歸檔存儲(Archive)。
ossutil set-meta oss://examplebucket/desfolder/ X-Oss-Storage-Class:Archive --include "*abc*" --exclude "*.jpg" --exclude "*.txt" -u -r
重要通過set-meta命令對大于100 MB的冷歸檔或者深度冷歸檔存儲類型Object進行存儲類型轉換時,可能會出現因服務器超時導致轉換操作失敗的問題。因此,當您需要對大于100 MB的冷歸檔或者深度冷歸檔存儲類型Object進行存儲類型轉換時,請使用cp命令。
示例三:為相同或不同目錄下的多個Object設置或更新元數據
不同目錄下
當您需要為Bucket中的多個Object設置或更新元數據,這些Object歸屬于Bucket的不同目錄下,例如exampleobject1.jpg位于examplebucket根目錄下,exampleobject2.png位于examplebucket的dir1/目錄下,exampleobject3.txt位于examplebucket的dir2/目錄下。此時,您需要按照以下步驟設置或更新多個Object的元數據。
將待設置或更新元數據的多個Object寫入本地文件localfile.txt。
exampleobject1.jpg dir1/exampleobject2.png dir2/exampleobject3.txt
為多個指定Object設置或更新元數據。
結合--object-file選項將examplebucket中多個Object的緩存行為(Cache-Control)修改為no-cache(不直接使用緩存),讀寫權限(x-oss-object-acl)修改為private(私有),并開啟快照。
ossutil set-meta oss://examplebucket Cache-Control:no-cache#X-Oss-Object-Acl:private --update --object-file localfile.txt --snapshot-path dir/
相同目錄下
方法一
參考不同目錄下的操作示例為相同目錄下的多個Object設置或更新元數據。
方法二:
參考示例二為相同目錄下的多個Object設置或更新元數據。
返回結果
以上操作成功后,返回結果中將包含設置或更新文件元數據所用時長,示例如下:
0.106852(s) elapsed
刪除自定義元數據
結合--delete選項僅支持刪除以X-Oss-Meta-
開頭的自定義元數據。
示例一:刪除單個Object的自定義元數據
刪除examplebucket中exampleobject.txt包含的以
X-Oss-Meta-
開頭的自定義元數據,其中Value值必須為空。ossutil set-meta oss://examplebucket/exampleobject.txt X-Oss-Meta-Createdby --delete
示例二:批量刪除多個Object的自定義元數據
批量刪除多個Object的自定義元數據步驟如下:
將待刪除自定義元數據的Object名稱寫入本地文件localfile.txt。
exampleobject1.jpg dir1/exampleobject2.png dir2/exampleobject3.txt
刪除多個Object的自定義元數據。
結合--object-file選項批量刪除examplebucket中多個Object包含的以
X-Oss-Meta-
開頭的自定義元數據,其中Value值必須為空。ossutil set-meta oss://examplebucket X-Oss-Meta-Location --delete --object-file localfile.txt --snapshot-path dir/
返回結果
以上操作成功后,返回結果中將包含刪除自定義元數據所用時長,示例如下:
0.106846(s) elapsed
通用選項
當您需要通過命令行工具ossutil切換至另一個地域的Bucket時,可以通過-e選項指定該Bucket所屬的Endpoint。當您需要通過命令行工具ossutil切換至另一個阿里云賬號下的Bucket時,可以通過-i選項指定該賬號的AccessKey ID,并通過-k選項指定該賬號的AccessKey Secret。
例如您需要為另一個阿里云賬號下,華東2(上海)地域下目標存儲空間testbucket下的testobject.jpg文件設置讀寫權限ACL為private的元數據,命令如下:
ossutil set-meta oss://testbucket/testobject.jpg X-Oss-Object-Acl:private -e oss-cn-shanghai.aliyuncs.com -i LTAI4Fw2NbDUCV8zYUzA**** -k 67DLVBkH7EamOjy2W5RVAHUY9H****
關于此命令的其他通用選項的更多信息,請參見通用選項。