如何使用AWS S3 CLI将文件转储到BASH中的stdout?


93

我正在启动一个bash脚本,它将在S3中采用路径(如ls命令所指定),并将所有文件对象的内容转储到stdout。本质上,我想复制cat /path/to/files/*S3以外的其他语言,例如s3cat '/bucket/path/to/files/*'。我首先看一下这些选项是将cp命令用于一个临时文件,然后执行cat该操作。

有没有人尝试过这种方法或类似方法,或者已经没有我找不到的命令?


我使用PHP和Services_Amazon_S3类来做类似的事情。
2015年

Answers:


152

将所有文件对象的内容转储到stdout。

如果传递命令-目的地,则可以完成此操作aws s3 cp。例如, $ aws s3 cp s3://mybucket/stream.txt -

您想做的是这样的吗?::

#!/bin/bash

BUCKET=YOUR-BUCKET-NAME
for key in `aws s3api list-objects --bucket $BUCKET --prefix bucket/path/to/files/ | jq -r '.Contents[].Key'`
do
  echo $key
  aws s3 cp s3://$BUCKET/$key - | md5sum
done

5
但是请注意,“-”作为stdout的占位符并不能在所有版本的awscli中都起作用。例如,ubuntu LTS 14.04.2随附的版本1.2.9不支持它。
antoniob

同上。我在Ubuntu 12.x上,它在我的bash实例中不起作用。
Kode Charlie 2015年

问题是您无法获得该文件的特定版本。
Eamorr '16

不工作在Mac OS海伊谢拉10.13.6或者(aws --versionaws-cli/1.15.40 Python/3.6.5 Darwin/17.7.0 botocore/1.10.40
MichaelChirico

此答案还具有以下优点:文件内容将流式传输到您的终端,而不是整体复制。详情请见loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/…–
Khoa,

47

如果您使用的AWS CLI版本不支持复制到“-”,则还可以使用/ dev / stdout:

$ aws s3 cp --quiet s3://mybucket/stream.txt /dev/stdout

您还可能希望该--quiet标志阻止将类似于以下内容的摘要行附加到输出中:

下载:s3://mybucket/stream.txt到../../dev/stdout


1

您可以尝试使用s3streamcat,它也支持bzip,gzip和xz格式。

与安装

sudo pip install s3streamcat

用法:

s3streamcat s3://bucketname/dir/file_path
s3streamcat s3://bucketname/dir/file_path | more
s3streamcat s3://bucketname/dir/file_path | grep something


-3

如果您希望使用BASH完成此操作,则必须调出外部应用程序,例如AWS Command-Line Interface(CLI)。它没有等效的CAT,因此您需要在本地复制文件,然后对其进行CAT。

另外,您可以使用/编写直接调用AWS开发工具包的应用程序,该应用程序可用于Python,PHP,Java等语言。通过使用SDK,可以在内存中检索文件内容,然后将其发送到stdout。


上面的答案列出了可以将'-'作为第二个文件参数使用'cp'使其输出到stdout的文件。
Asfand Qazi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.