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

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

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


person Neil C. Obremski    schedule 04.02.2015    source источник
comment
Я использую PHP и класс Services_Amazon_S3, чтобы делать аналогичные вещи.   -  person Misunderstood    schedule 04.02.2015


Ответы (5)


выгрузить содержимое всех файловых объектов на стандартный вывод.

Вы можете сделать это, если передадите - в качестве назначения команды 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
person quiver    schedule 08.02.2015
comment
Однако обратите внимание, что '-' в качестве заполнителя для stdout не работает во всех версиях awscli. Например, версия 1.2.9, которая поставляется с ubuntu LTS 14.04.2, не поддерживает его. - person antoniob; 06.07.2015
comment
То же самое. Я использую Ubuntu 12.x, и он не работает в моем экземпляре bash. - person Kode Charlie; 12.11.2015
comment
Проблема в том, что вы не можете получить конкретную версию файла. - person Eamorr; 05.07.2016
comment
не работает и на macOS High Sierra 10.13.6 (aws --version: aws-cli/1.15.40 Python/3.6.5 Darwin/17.7.0 botocore/1.10.40) - person MichaelChirico; 03.08.2018
comment
этот ответ также имеет то преимущество, что содержимое файла будет передаваться на ваш терминал, а не копироваться целиком. подробнее см. loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/ - person Khoa; 29.01.2019

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

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

Вы также можете захотеть, чтобы флаг --quiet предотвращал добавление итоговой строки, подобной следующей, к вашему выводу:

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

person Drew    schedule 16.05.2016

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

Ah ha!

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

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

person Neil C. Obremski    schedule 04.02.2015

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

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

person John Rotenstein    schedule 04.02.2015
comment
В приведенном выше списке ответов вы можете использовать 'cp' с '-' в качестве второго аргумента файла, чтобы он выводил файл на стандартный вывод. - person Asfand Qazi; 14.01.2016