AWS Command Line Interface
使用者指南

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

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

在執行任何命令前,請先設定您的預設登入資料。如需更多詳細資訊,請參閱 設定 AWS CLI

管理儲存貯體

高階 aws s3 命令支援常用的儲存貯體操作,例如建立、列出和刪除儲存貯體。

建立儲存貯體

使用 s3 mb 命令可建立儲存貯體。儲存貯體名稱必須是全域唯一,且應符合 DNS 標準。儲存貯體名稱可包含小寫字母、數字、連字號和句號。儲存貯體名稱的開頭和結尾只能使用字母或數字,連字號或句號旁邊不能使用句號。

$ aws s3 mb s3://bucket-name

列出儲存貯體

使用 s3 ls 命令來列出您的儲存貯體。以下為一些常用範例。

下列命令可列出所有儲存貯體。

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

下列命令列出儲存貯體中的所有物件和資料夾 (在 S3 中稱為「字首」)。

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

上述輸出顯示在字首 path/ 下方有名為 MyFile1.txt 的檔案。

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

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

刪除儲存貯體

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

$ aws s3 rb s3://bucket-name

根據預設,儲存貯體必須為空才能成功操作。若要移除非空儲存貯體,則需要包含 --force 選項。

以下範例會刪除儲存貯體中的所有物件和子資料夾,然後移除該儲存貯體。

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

注意

如果您使用版本控制的儲存貯體 (其包含先前已刪除—但仍保留—的物件),則此命令不會允許您移除該儲存貯體。您必須先刪除所有內容。

管理物件

高階 aws s3 命令能讓管理 Amazon S3 物件變得相當方便。物件命令包含 s3 cps3 lss3 mvs3 rms3 sync

cplsmvrm 命令的功能與其在 Unix 上的對應命令相似,可讓您在本機目錄和 Amazon S3 儲存貯體之間順暢工作。sync 命令可同步儲存貯體內容和目錄,或同步兩個儲存貯體。

注意

所有涉及上傳物件到 Amazon S3 儲存貯體的高階命令 (s3 cps3 mvs3 sync) 都會在物件較大的情況下,自動執行分段上傳。

使用這些命令時,無法恢復失敗的上傳。若分段上傳因為逾時或按下 Ctrl+C 手動取消而失敗,AWS CLI 會清理掉任何建立的檔案並中止上傳。此程序需要幾分鐘的時間。

如果程序受到 kill 命令或系統故障影響中斷,進行中的分段上傳會保留在 Amazon S3 中,您必須透過 AWS Management Console 手動加以清理,或使用 s3api abort-multipart-upload 命令來清理。

cpmvsync 命令包含 --grants 選項,您可用來向指定使用者或群組授予對物件的許可。使用下列語法,針對許可清單設定 --grants 選項。

--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 許可,並授予和 user@example.com 相關聯的帳戶對該物件的 full 取可 (readreadaclwriteacl)。

$ 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

s3 sync 命令使用下列語法。可能的來源目標組合為:

  • 本地檔案系統到 Amazon S3

  • Amazon S3 到本地檔案系統

  • Amazon S3 至 Amazon S3

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

下列範例將 my-bucket 中名為 path 的 Amazon S3 資料夾內容與目前的工作目錄進行同步。s3 sync 會更新任何與目的地檔案具有相同名字、但檔案大小或修改時間不同的檔案。輸出顯示在同步期間所執行的特定操作。請注意,該操作會將子目錄 MySubdirectory 與其內容與 s3://my-bucket/path/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

一般來說,s3 sync 只會複製遺失或過期的檔案,或是來源與目標之間的物件。但是您也可以提供 --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

您可使用 --exclude--include 選項來指定規則,用於篩選要在同步期間複製的檔案或物件。根據預設,同步包含了指定資料夾中的所有項目。因此,只有在您需對 --exclude 選項指定例外時,才需要使用 --include (亦即,--include 實際上意思為「不排除」)。選項會按指定順序套用效果,如下列範例所示。

Local directory contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt ''' $ aws s3 sync . s3://my-bucket/path --exclude "*.txt" upload: MyFile2.rtf to s3://my-bucket/path/MyFile2.rtf ''' $ aws s3 sync . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt" upload: MyFile1.txt to s3://my-bucket/path/MyFile1.txt upload: MyFile88.txt to s3://my-bucket/path/MyFile88.txt upload: MyFile2.rtf to s3://my-bucket/path/MyFile2.rtf ''' $ aws s3 sync . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt" --exclude "MyFile?.txt" upload: MyFile2.rtf to s3://my-bucket/path/MyFile2.rtf upload: MyFile88.txt to s3://my-bucket/path/MyFile88.txt

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

Assume local directory and s3://my-bucket/path currently in sync and each contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt ''' // Delete local .txt files $ rm *.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 "my-bucket/path/MyFile?.txt" delete: s3://my-bucket/path/MyFile88.txt ''' // Delete MyFile2.rtf $ aws s3 rm s3://my-bucket/path/MyFile2.rtf // 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 sync 命令也接受 --acl 選項,您可使用該選項將檔案的存取許可複製到 Amazon S3。--acl 選項接受 privatepublic-readpublic-read-write 值。

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

如同先前所述,s3 命令集包含 cpmvlsrm,這些命令的功能與其在 Unix 上的對應命令相似。下列為若干範例:

// Copy MyFile.txt in current directory to s3://my-bucket/path $ aws s3 cp MyFile.txt s3://my-bucket/path/ // Move all .jpg files in s3://my-bucket/path to ./MyDirectory $ aws s3 mv s3://my-bucket/path ./MyDirectory --exclude "*" --include "*.jpg" --recursive // List the contents of my-bucket $ aws s3 ls s3://my-bucket // List the contents of path in my-bucket $ aws s3 ls s3://my-bucket/path/ // Delete s3://my-bucket/path/MyFile.txt $ aws s3 rm s3://my-bucket/path/MyFile.txt // Delete s3://my-bucket/path and all of its contents $ aws s3 rm s3://my-bucket/path --recursive

--recursive 選項與 cpmvrm 一起用於目錄或資料夾時,該命令將套用到整個樹狀目錄,包含所有子目錄。如同 --exclude 命令,這些命令也接受 --include--aclsync 選項。