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?
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
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
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