Как использовать AWS S3 CLI для вывода файлов в stdout в BASH?

Я запускаю bash script, который примет путь в S3 (как указано в команде ls) и выгрузите содержимое всех файловых объектов в stdout. По сути, я хотел бы реплицировать cat /path/to/files/* за исключением S3, например. s3cat '/bucket/path/to/files/*'. Мой первый взгляд на варианты состоит в том, чтобы использовать команду cp для временного файла, а затем cat, что.

Кто-нибудь пробовал это или подобное, или есть уже команда, которую я не нахожу, что это делает?

Ответ 1

сбрасывает содержимое всех файлов в 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

Ответ 2

Если вы используете версию AWS CLI, которая не поддерживает копирование на "-", вы также можете использовать /dev/stdout:

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

Также может потребоваться, чтобы флаг --quiet не включал итоговую строку, как показано ниже:

скачать: s3://mybucket/stream.txt в.. /../dev/stdout

Ответ 4

Вы можете попробовать использовать 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

Ответ 5

Если вы хотите выполнить это с помощью BASH, вам придется вызвать внешнее приложение, например Интерфейс командной строки AWS (CLI). У него нет CAT-эквивалента, поэтому вам нужно будет скопировать файл локально, а затем CAT его.

В качестве альтернативы вы можете использовать/написать приложение, которое напрямую вызывает AWS SDK, доступный для таких языков, как Python, PHP, Java. Используя SDK, содержимое файла может быть восстановлено в памяти, а затем отправлено на стандартный вывод.