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


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

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

5 57

5 ответов:

сбросьте содержимое всех объектов файла в stdout.

вы можете сделать это, если вы проходите - для назначения . Например, $ 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 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

Ах-ха!

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

Я пишу больше символов, чтобы удовлетворить требование длины.

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

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