wake-up-neo.net

Wie wird AWS S3 CLI verwendet, um Dateien in BASH stdout auszugeben?

Ich starte ein Bash-Skript, das einen Pfad in S3 (wie im Befehl ls angegeben) einnimmt, und den Inhalt aller Dateiobjekte in stdout ausgeben. Im Wesentlichen möchte ich cat /path/to/files/* mit Ausnahme von S3 replizieren, z. s3cat '/bucket/path/to/files/*'. Meine erste Ansicht bei den Optionen besteht darin, den Befehl cp für eine temporäre Datei und dann cat zu verwenden.

Hat jemand dieses oder ähnliches ausprobiert oder gibt es schon einen Befehl, den ich nicht finde?

65

den Inhalt aller Dateiobjekte in stdout ausgeben.

Sie können dies erreichen, wenn Sie - als Ziel des aws s3 cp-Befehls übergeben. Zum Beispiel $ aws s3 cp s3://mybucket/stream.txt -.

Was Sie versuchen, ist so etwas? ::

#!/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
98
quiver

Wenn Sie eine Version der AWS-CLI verwenden, die das Kopieren nach "-" nicht unterstützt, können Sie auch/dev/stdout verwenden:

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

Möglicherweise möchten Sie auch, dass das Flag --quiet verhindert, dass eine Zusammenfassung wie die folgende an Ihre Ausgabe angehängt wird:

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

27
Drew

Sie können versuchen, s3streamcat zu verwenden. Es unterstützt auch die Formate bzip, gzip und xz.

Installiere mit

Sudo pip install s3streamcat

Verwendungszweck:

s3streamcat s3://bucketname/dir/file_path
s3streamcat s3://bucketname/dir/file_path | more
s3streamcat s3://bucketname/dir/file_path | grep something
0
samarth