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

通过 Amazon CLI 使用高级别(s3)命令

本主题介绍一些命令,可用于在 Amazon CLI 中通过 aws s3 命令管理 Amazon S3 存储桶和对象。有关本主题未涵盖的命令和其他命令示例,请参阅《Amazon CLI 参考》中的 aws s3 命令。

高级别 aws s3 命令简化了 Amazon S3 对象管理。使用这些命令,您能够在 Amazon S3 自身中管理其内容以及使用本地目录管理这些内容。

先决条件

要运行 s3 命令,您需要:

  • 安装和配置 Amazon CLI。有关更多信息,请参阅 安装或更新到最新版本的 Amazon CLI身份验证和访问凭证

  • 您使用的配置文件必须具有允许示例代码执行Amazon操作的权限。

  • 需了解如下 Amazon S3 术语:

    • 存储桶 – 顶级 Amazon S3 文件夹。

    • 前缀 – 存储桶中的 Amazon S3 文件夹。

    • 对象 – 托管在 Amazon S3 存储桶中的任何项。

开始之前

本节介绍在使用 aws s3 命令之前需要注意的一些事项。

大型对象上载

当您使用 aws s3 命令将大型对象上传到 Amazon S3 存储桶时,Amazon CLI 会自动执行分段上传。使用这些 aws s3 命令时,您无法恢复失败的上传操作。

如果分段上传由于超时而失败,或者您在 Amazon CLI 中手动取消该操作,则 Amazon CLI 会停止上传并清除已创建的任何文件。此过程可能耗时数分钟。

如果使用 kill 命令或者由于系统故障而取消了分段上传或清理过程,则创建的文件将保留在 Amazon S3 存储桶中。要清除分段上传,请使用 s3api abort-multipart-upload 命令。

分段复制中的文件属性和标签

当您使用 aws s3 命名空间中的 Amazon CLI 版本 1 版本命令将文件从一个 Amazon S3 存储桶位置复制到另一个 Amazon S3 存储桶位置,并且该操作使用分段复制时,源对象中的文件属性不会被复制到目标对象。

原定设置情况下,s3 命名空间中执行分段复制的 Amazon CLI 版本 2 命令会将所有标签和以下属性集从源副本传输到目标副本:content-typecontent-languagecontent-encodingcontent-dispositioncache-controlexpiresmetadata

这可能会导致对 Amazon S3 终端节点进行其他 Amazon API 调用,而在使用 Amazon CLI 版本 1 时,将不会进行这些调用。这些调用可能包括:HeadObjectGetObjectTaggingPutObjectTagging

如果需要在 Amazon CLI 版本 2 命令中更改此默认行为,请使用 --copy-props 参数指定以下选项之一:

  • default – 默认值。指定该复制包含附加到源对象的所有标签以及用于非分段复制的 --metadata-directive 参数所包含的属性:content-typecontent-languagecontent-encodingcontent-dispositioncache-controlexpiresmetadata

  • metadata-directive – 指定该复制仅包含用于非分段复制的 --metadata-directive 参数所包含的属性。它不会复制任何标签。

  • none – 指定该复制不包含源对象中的任何属性。

创建存储桶

使用 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 命令的常用选项。有关可用选项的完整列表,请参阅《Amazon 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/ 中的对象(即 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 命令的常用选项。有关选项的完整列表,请参阅《Amazon CLI 命令参考》中的 s3 rm

以下示例将从 filename.txt 删除 s3://bucket-name/example

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

以下示例使用 s3://bucket-name/example 选项从 --recursive 删除所有对象。

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

移动对象

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

语法

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

有关与此命令一起使用的一些常见选项以及相关示例,请参阅 s3 命令的常用选项。有关可用选项的完整列表,请参阅《Amazon CLI 命令参考》中的 s3 mv

以下示例将所有对象从 s3://bucket-name/example 移动到 s3://my-bucket/

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

以下示例使用 s3 mv 命令,将本地文件从当前工作目录移动到 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 命令的常用选项。有关选项的完整列表,请参阅《Amazon 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 命令的常用选项。有关选项的完整列表,请参阅《Amazon CLI 命令参考》中的 s3 sync

下面的示例将存储桶 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

下面的示例对上一示例进行了扩展,显示了如何使用 --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 命令的常用选项

以下选项经常用于本主题中所述的命令。有关可在命令中使用的选项的完整列表,请参阅 Amazon CLI 版本 2 参考指南中的特定命令。

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 // 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 ...]

每个值都包含以下元素:

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

资源

Amazon CLI 参考:

服务参考: