通过 AWS CLI 使用高级别 (s3) 命令 - AWS Command Line Interface
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

通过 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 开发人员指南 中的分段上传概述

先决条件

要运行 s3 命令,您需要:

  • 安装和配置 AWS CLI。有关更多信息,请参阅 安装 AWS CLI配置基础知识

  • 了解以下 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 Command Reference 中的 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/ 中的对象(即 bucket-name 中按前缀 example/ 筛选出的对象)。

$ 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 Command Reference 中的 s3 rm

以下示例从 s3://bucket-name/example 中删除所有对象。

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

移动对象

使用 s3 mv 命令可从存储桶或本地目录中移动对象。

语法

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

有关与此命令一起使用的一些常见选项以及相关示例,请参阅s3 命令的常用选项。有关可用选项的完整列表,请参阅 AWS CLI Command Reference 中的 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 Command Reference 中的 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 ./

以下示例使用 cat 文本编辑器,将文本“hello world”流式传输到 s3://bucket-name/filename.txt 文件。

$ cat "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 Command Reference 中的 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 "my-bucket/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 Command Reference 中的特定命令。

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
exclude

使用 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 // Exclude all .txt files, resulting in MyFile1.txt and MyFile88.txt being copied $ aws s3 cp . s3://my-bucket/path --include "*.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 sync 命令包括一个 --grants 选项,可用来向指定的用户或组授予对对象的权限。使用以下语法对权限列表设置 --grants 选项。将 PermissionGrantee_TypeGrantee_ID 替换为您自己的值。

语法

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

每个值都包含以下元素:

  • 权限 – 指定授予的权限。可以设置为 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.cn/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

参考

AWS CLI 参考:

服务参考: