如何使用 AWS S3 CLI 将文件转储到 BASH 中的标准输出?

How to use AWS S3 CLI to dump files to stdout in BASH?

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

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

啊哈!

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

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

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

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

dump the contents of all of the file objects to 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

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

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

您可能还需要 --quiet 标志来防止像下面这样的摘要行被附加到您的输出中:

download: s3://mybucket/stream.txt to ../../dev/stdout

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