透過 AWS CLI 使用高階 (s3) 命令 - AWS Command Line Interface

AWS CLI 第 1 版已棄用 Python 2.7、3.4 及 3.5。如需詳細資訊,請參閱關於 AWS CLI 版本的 AWS CLI 第 1 版部分。

透過 AWS CLI 使用高階 (s3) 命令

本主題說明如何使用 AWS CLI 中的 aws s3 命令來管理 Amazon S3 儲存貯體和物件。

高階 aws s3 命令可簡化 Amazon S3 物件的管理作業。這些命令可讓您管理 Amazon S3 內部的內容以及本機目錄的內容。

注意

當您使用 aws s3 命令將大型物件上傳至 Amazon S3 儲存貯體時,AWS CLI 會自動執行分段上傳。使用這些 aws s3 命令時,您無法恢復失敗的上傳。

若分段上傳因為逾時而失敗,或您在 AWS CLI 中手動取消上傳,AWS CLI 會中止上傳並清理掉任何建立的檔案。此程序需要幾分鐘的時間。

如果分段上傳或清理程序因為 Kill 命令或系統故障而取消,則建立的檔案會保留在 Amazon S3 儲存貯體中。若要清理分段上傳,請使用 s3api abort-multipart-upload 命令。

如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的分段上傳概觀

Prerequisites

若要執行 s3 命令,您需要:

  • 安裝 AWS CLI;如需詳細資訊,請參閱 安裝、更新和解除安裝 AWS CLI

  • 設定 AWS CLI;如需詳細資訊,請參閱 組態基礎概念。您使用的設定檔必須具有允許範例執行 AWS 操作的許可。

  • 了解這些 Amazon S3 術語:

    • 儲存貯體 – 頂層 Amazon S3 資料夾。

    • 前綴 – 儲存貯體中的 Amazon S3 資料夾。

    • 物件 – 託管於 Amazon S3 儲存貯體中的任一個項目。

建立儲存貯體

使用 s3 mb 命令來建立儲存貯體。儲存貯體名稱必須是全域唯一 (在所有 Amazon S3 中都為唯一),且應符合 DNS 標準。

儲存貯體名稱可包含小寫字母、數字、連字號和句號。儲存貯體名稱的開頭和結尾只能使用字母或數字,連字號或句號旁邊不能使用句號。

語法:。

$ aws s3 mb <target> [--options]

下列範例會建立 s3://bucket-name 儲存貯體。

$ aws s3 mb s3://bucket-name

列出儲存貯體和物件

若要列出儲存貯體、資料夾或物件,請使用 s3 ls 命令。使用沒有目標或選項的命令會列出所有儲存貯體。

語法:。

$ aws s3 ls <target> [--options]

如需搭配此命令使用的幾個常見選項和範例,請參閱 s3 命令的常用選項。如需可用選項的完整清單,請參閱《AWS CLI 命令參考》中的 s3 ls

以下範例列出您的所有 Amazon S3 儲存貯體。

$ aws s3 ls 2018-12-11 17:08:50 my-bucket 2018-12-14 14:55:44 my-bucket2

下列命令列出儲存貯體中的所有物件和前綴。在此範例輸出中,前綴 example/ 有一個名為 MyFile1.txt 的檔案。

$ aws s3 ls s3://bucket-name PRE example/ 2018-12-04 19:05:48 3 MyFile1.txt

您可以將特定的前綴包含在命令中,將輸出篩選為該前綴。下列命令列出 bucket-name/example/ 中的物件 (也就是使用前綴 example/ 篩選出 bucket-name 中的物件)。

$ aws s3 ls s3://bucket-name/example/ 2018-12-06 18:59:32 3 MyFile1.txt

刪除儲存貯體

若要刪除儲存貯體,請使用 s3 rb 命令。

語法:。

$ aws s3 rb <target> [--options]

以下範例會移除 s3://bucket-name 儲存貯體。

$ aws s3 rb s3://bucket-name

根據預設,儲存貯體必須為空才能成功操作。若要移除不是空的儲存貯體,您需要包含 --force 選項。如果您使用受版本控制的儲存貯體 (其包含先前已刪除但仍保留的物件),則此命令不會允許您移除該儲存貯體。您必須先刪除所有內容。

以下範例命令會在儲存貯體中刪除所有物件和前綴,然後刪除該儲存貯體。

$ aws s3 rb s3://bucket-name --force

刪除物件

若要刪除儲存貯體或本機目錄中的物件,請使用 s3 rm 命令。

語法:。

$ aws s3 rm <target> [--options]

如需搭配此命令使用的幾個常見選項和範例,請參閱 s3 命令的常用選項。如需選項的完整清單,請參閱《AWS CLI 命令參考》中的 s3 rm

下列範例刪除來自 s3://bucket-name/examplefilename.txt

$ aws s3 rm s3://bucket-name/example/filename.txt --recursive

以下範例使用 --recursive 選項刪除所有來自 s3://bucket-name/example 的物件。

$ aws s3 rm s3://bucket-name/example --recursive

移動物件

使用 s3 mv 命令從儲存貯體或本機目錄移動物件。

語法:。

$ aws s3 mv <source> <target> [--options]

如需搭配此命令使用的幾個常見選項和範例,請參閱 s3 命令的常用選項。如需可用選項的完整清單,請參閱《AWS CLI 命令參考》中的 s3 mv

下列範例會將所有物件從 s3://bucket-name/example 移動至 s3://my-bucket/

$ aws s3 mv s3://bucket-name/example s3://my-bucket/

以下範例會使用 s3 cp 命令將本機檔案從目前的工作目錄移動至 Amazon S3 儲存貯體。

$ aws s3 mv filename.txt s3://bucket-name

以下範例將檔案從 Amazon S3 儲存貯體移動至目前的工作目錄,其中 ./ 指定您目前使用中的目錄。

$ aws s3 mv s3://bucket-name/filename.txt ./

複製物件

使用 s3 cp 命令從儲存貯體或本機目錄複製物件。

語法:。

$ aws s3 cp <source> <target> [--options]

您可以使用破折號參數將檔案串流傳輸至標準輸入 (stdin) 或標準輸出 (stdout)。

警告

如果您使用的是 PowerShell,Shell 可能會改變 CRLF 的編碼,或者將 CRLF 新增至管道輸入或輸出,或者重新導向的輸出。

s3 cp 命令使用以下語法將檔案串流從 stdin 上傳至指定的儲存貯體。

語法:。

$ aws s3 cp - <target> [--options]

s3 cp 命令會使用下列語法來為 stdout 下載 Amazon S3 檔案串流。

語法:。

$ aws s3 cp <target> [--options] -

如需搭配此命令使用的幾個常見選項和範例,請參閱 s3 命令的常用選項。如需選項的完整清單,請參閱《AWS CLI 命令參考》中的 s3 cp

下列範例會將來自 s3://bucket-name/example 的物件複製到 s3://my-bucket/

$ aws s3 cp s3://bucket-name/example s3://my-bucket/

以下範例會使用 s3 cp 命令將本機檔案從目前的工作目錄複製至 Amazon S3 儲存貯體。

$ aws s3 cp filename.txt s3://bucket-name

以下範例將檔案從您的 Amazon S3 儲存貯體複製至目前的工作目錄,其中 ./ 指定您目前使用中的目錄。

$ aws s3 cp s3://bucket-name/filename.txt ./

以下範例會使用 Echo 將文字「Hello World」串流至 s3://bucket-name/filename.txt 檔案。

$ echo "hello world" | aws s3 cp - s3://bucket-name/filename.txt

下列範例會串流 s3://bucket-name/filename.txt 檔案至 stdout 並將內容列印至主控台。

$ aws s3 cp s3://bucket-name/filename.txt - hello world

下列範例會串流 s3://bucket-name/pre 內容至 stdout,使用 bzip2 命令來壓縮檔案,再上傳名為 key.bz2 的壓縮檔至 s3://bucket-name

$ aws s3 cp s3://bucket-name/pre - | bzip2 --best | aws s3 cp - s3://bucket-name/key.bz2

同步物件

s3 sync 命令可同步儲存貯體和目錄的內容,或同步兩個儲存貯體的內容。一般來說,s3 sync 會複製遺失或過期的檔案,或是來源與目標之間的物件。但是您也可以提供 --delete 選項,來從目標中移除沒有出現在來源中的檔案或物件。

語法:。

$ aws s3 sync <source> <target> [--options]

如需搭配此命令使用的幾個常見選項和範例,請參閱 s3 命令的常用選項。如需選項的完整清單,請參閱《AWS CLI 命令參考》中的 s3 sync

下列範例將名為 my-bucket 的儲存貯體中名為 path 的 Amazon S3 前綴內容與目前的工作目錄進行同步。

s3 sync 會更新任何與目的地檔案具有相同名字,但是檔案大小或修改時間不同的檔案。輸出顯示在同步期間所執行的特定操作。請注意,操作會使用 s3://my-bucket/path/MySubdirectory 遞迴同步處理子目錄 MySubdirectory 及其內容。

$ aws s3 sync . s3://my-bucket/path upload: MySubdirectory\MyFile3.txt to s3://my-bucket/path/MySubdirectory/MyFile3.txt upload: MyFile2.txt to s3://my-bucket/path/MyFile2.txt upload: MyFile1.txt to s3://my-bucket/path/MyFile1.txt

下列範例 (為前一個範例的延伸) 示範如何使用 --delete 選項。

// Delete local file $ rm ./MyFile1.txt // Attempt sync without --delete option - nothing happens $ aws s3 sync . s3://my-bucket/path // Sync with deletion - object is deleted from bucket $ aws s3 sync . s3://my-bucket/path --delete delete: s3://my-bucket/path/MyFile1.txt // Delete object from bucket $ aws s3 rm s3://my-bucket/path/MySubdirectory/MyFile3.txt delete: s3://my-bucket/path/MySubdirectory/MyFile3.txt // Sync with deletion - local file is deleted $ aws s3 sync s3://my-bucket/path . --delete delete: MySubdirectory\MyFile3.txt // Sync with Infrequent Access storage class $ aws s3 sync . s3://my-bucket/path --storage-class STANDARD_IA

在使用 --delete 選項時,--exclude--include 選項可以在 s3 sync 操作期間篩選要刪除的檔案或物件。在此情況下,參數字串必須針對目標目錄或儲存貯體,指定檔案要排除或包含在刪除操作中。如下列範例所示。

Assume local directory and s3://my-bucket/path currently in sync and each contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt ''' // Sync with delete, excluding files that match a pattern. MyFile88.txt is deleted, while remote MyFile1.txt is not. $ aws s3 sync . s3://my-bucket/path --delete --exclude "path/MyFile?.txt" delete: s3://my-bucket/path/MyFile88.txt ''' // Sync with delete, excluding MyFile2.rtf - local file is NOT deleted $ aws s3 sync s3://my-bucket/path . --delete --exclude "./MyFile2.rtf" download: s3://my-bucket/path/MyFile1.txt to MyFile1.txt ''' // Sync with delete, local copy of MyFile2.rtf is deleted $ aws s3 sync s3://my-bucket/path . --delete delete: MyFile2.rtf

s3 命令的常用選項

本主題中描述的指令經常使用下列選項。如需可用於命令的完整選項清單,請參閱《AWS CLI 命令參考》

acl

s3 syncs3 cp 可以使用 --acl 選項。這可讓您為複製至 Amazon S3 的檔案設定存取許可。--acl 選項接受 privatepublic-readpublic-read-write 值。如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的固定 ACL

$ aws s3 sync . s3://my-bucket/path --acl public-read
排除

在使用 s3 cps3 mvs3 syncs3 rm 命令時,您可以他透過 --exclude--include 選項來篩選結果。--exclude 選項會將規則設定為僅從命令中排除物件,而選項會依指定的順序套用。如以下範例所示。

Local directory contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt // Exclude all .txt files, resulting in only MyFile2.rtf being copied $ aws s3 cp . s3://my-bucket/path --exclude "*.txt" // Exclude all .txt files but include all files with the "MyFile*.txt" format, resulting in, MyFile1.txt, MyFile2.rtf, MyFile88.txt being copied $ aws s3 cp . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt" // Exclude all .txt files, but include all files with the "MyFile*.txt" format, but exclude all files with the "MyFile?.txt" format resulting in, MyFile2.rtf and MyFile88.txt being copied $ aws s3 cp . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt" --exclude "MyFile?.txt"
包含

在使用 s3 cps3 mvs3 syncs3 rm 命令時,您可以透過 --exclude--include 選項來篩選結果。--include 選項會將規則設定為僅包含命令指定的物件,而選項會依指定的順序套用。如以下範例所示。

Local directory contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt // Include all .txt files, resulting in MyFile1.txt and MyFile88.txt being copied $ aws s3 cp . s3://my-bucket/path --include "*.txt" // Include all .txt files but exclude all files with the "MyFile*.txt" format, resulting in no files being copied $ aws s3 cp . s3://my-bucket/path --include "*.txt" --exclude "MyFile*.txt" // Include all .txt files, but exclude all files with the "MyFile*.txt" format, but include all files with the "MyFile?.txt" format resulting in MyFile1.txt being copied $ aws s3 cp . s3://my-bucket/path --include "*.txt" --exclude "MyFile*.txt" --include "MyFile?.txt"
授予

s3 cps3 mvs3 sync 命令包含 --grants 選項,您可用來向指定使用者或群組授予對物件的許可。使用下列語法將 --grants 選項設定為許可清單。用您的數值取代 PermissionGrantee_TypeGrantee_ID

語法:。

--grants Permission=Grantee_Type=Grantee_ID [Permission=Grantee_Type=Grantee_ID ...]

每個數值包含下列元素:

  • Permission – 指定授予的許可。可設定為 readreadaclwriteaclfull

  • Grantee_Type – 指定識別被授予者的方式。可設定為 uriemailaddressid

  • Grantee_ID – 根據 Grantee_Type 指定被授予者。

    • uri – 群組的 URI。如需詳細資訊,請參閱被授予者是什麼?

    • emailaddress – 帳戶的電子郵件地址。

    • id – 帳戶的正式 ID。

如需有關 Amazon S3 存取控制的詳細資訊,請參閱存取控制

下列範例將物件複製到儲存貯體中。其授予所有人對該物件的 read 許可,並授予和 full 相關聯的帳戶對該物件的 read 取可 (readaclwriteacluser@example.com)。

$ aws s3 cp file.txt s3://my-bucket/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=emailaddress=user@example.com

您也可以為您上傳到 Amazon S3 的物件,指定非預設儲存方案 (REDUCED_REDUNDANCYSTANDARD_IA)。若要這麼做,請使用 --storage-class 選項。

$ aws s3 cp file.txt s3://my-bucket/ --storage-class REDUCED_REDUNDANCY
recursive

當您使用此選項時,會對指定目錄或前綴下的所有檔案或物件執行該命令。以下範例刪除 s3://my-bucket/path 及其所有內容。

$ aws s3 rm s3://my-bucket/path --recursive

Resources

AWS CLI 參考:

服務參考: