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

Nei*_*ski 80 bash amazon-s3 amazon-web-services aws-cli

我正在启动一个bash脚本,该脚本将在S3中获取路径(如ls命令所指定)并将所有文件对象的内容转储到stdout.基本上我想复制cat /path/to/files/*除了S3,例如s3cat '/bucket/path/to/files/*'.我首先看到的选项是将cp命令用于临时文件,然后再使用该命令cat.

有没有人试过这个或类似的或者已经有一个命令我找不到它是什么?

qui*_*ver 128

将所有文件对象的内容转储到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
Run Code Online (Sandbox Code Playgroud)

  • 但请注意,' - '作为stdout的占位符在awscli的所有版本中都不起作用.例如,ubuntu LTS 14.04.2附带的1.2.9版本不支持它. (4认同)
  • 这个答案还有一个优点,即文件内容将流式传输到您的终端,而不是整体复制。查看更多信息 https://loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/#pipeline-processing-of-s3-files (2认同)

Dre*_*rew 37

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

$ aws s3 cp --quiet s3://mybucket/stream.txt /dev/stdout
Run Code Online (Sandbox Code Playgroud)

您还可能希望该--quiet标志阻止将如下所示的摘要行附加到输出中:

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


sam*_*rth 6

您可以尝试使用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
Run Code Online (Sandbox Code Playgroud)