Як використовувати AWS S3 CLI для скидання файлів у stdout у BASH?


93

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

Хтось пробував це чи подібне або вже існує команда, яку я не знаходжу, яка це робить?


Я використовую PHP та клас Services_Amazon_S3, щоб робити подібні речі.
Неправильно зрозумілий

Відповіді:


152

скинути вміст усіх файлових об'єктів у 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

5
Однак зверніть увагу, що '-' як заповнювач для stdout працює не у всіх версіях awscli. Наприклад, версія 1.2.9, яка постачається з ubuntu LTS 14.04.2, її не підтримує.
antoniob

Так само. Я працюю на Ubuntu 12.x, і це не працює в моєму екземплярі bash.
Kode Charlie

Проблема в тому, що ви не можете отримати певну версію файлу.
Eamorr,

не працює на 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)
MichaelChirico

Ця відповідь також має ту перевагу, що вміст файлу буде передаватися на ваш термінал, а не копіюватися в цілому. дивіться більше на сайті loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/…
Khoa

47

Якщо ви використовуєте версію AWS CLI, яка не підтримує копіювання в "-", ви також можете використовувати / dev / stdout:

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

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

завантажити: s3: //mybucket/stream.txt до ../../dev/stdout


1

Ви можете спробувати використовувати 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


-3

Якщо ви хочете зробити це за допомогою BASH, вам доведеться викликати зовнішню програму, таку як інтерфейс командного рядка AWS (CLI). Він не має еквівалента CAT, тому вам потрібно буде скопіювати файл локально, а потім CAT.

Крім того, ви можете використовувати / писати програму, яка безпосередньо викликає AWS SDK, яка доступна для таких мов, як Python, PHP, Java. За допомогою SDK вміст файлу можна отримати в пам’яті, а потім відправити у stdout.


У наведених вище відповідях перелічено, що ви можете використовувати 'cp' з '-' як другий аргумент файлу, щоб змусити його вивести файл на stdout.
Asfand Qazi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.