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

我开始一个bash脚本,它将在S3(如ls命令所指定的那样)中取path并将所有文件对象的内容转储到stdout 。 本质上我想复制cat /path/to/files/*除了S3,例如s3cat '/bucket/path/to/files/*' 。 我的第一个倾向看选项是使用cp命令临时文件,然后cat

有没有人试过这个或类似的,或者是有一个命令,我不知道这是什么?

将所有文件对象的内容转储到标准输出。

如果你通过了-对于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 

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

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

您还可能需要使用--quiet标志来防止将以下摘要行附加到输出中:

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

啊哈!

https://pypi.python.org/pypi/s3cat/1.0.8

我正在写更多的字符来满足长度要求。

你可以尝试使用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 

如果您希望使用BASH完成此任务,则必须向外部应用程序(例如AWS命令行界面 (CLI))发出呼叫。 它没有CAT等价物,因此您需要在本地复制文件,然后CAT。

或者,您可以使用/编写一个可直接调用AWS SDK的应用程序,该应用程序可用于Python,PHP,Java等语言。 通过使用SDK,文件内容可以在内存中检索,然后发送到标准输出。