Comment utiliser l’AWS S3 CLI pour vider des fichiers à stdout dans BASH?

Je commence un script bash qui prend un chemin dans S3 (comme spécifié dans la commande ls ) et vide le contenu de tous les objects de fichier dans stdout . Je voudrais essentiellement répliquer cat /path/to/files/* sauf pour S3, par exemple s3cat '/bucket/path/to/files/*' . Mon premier regard sur les options consiste à utiliser la commande cp dans un fichier temporaire, puis à le cat .

Quelqu’un a-t-il essayé ceci ou similaire ou existe-t-il déjà une commande que je ne trouve pas qui le fait?

vider le contenu de tous les objects du fichier dans stdout.

Vous pouvez y parvenir si vous passez - pour la destination de la commande aws s3 cp . Par exemple, $ aws s3 cp s3://mybucket/stream.txt - .

Qu’est-ce que vous essayez de faire est quelque chose comme ça? ::

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

Si vous utilisez une version de l’AWS CLI qui ne prend pas en charge la copie vers “-“, vous pouvez également utiliser / dev / stdout:

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

Vous pouvez également vouloir que le drapeau --quiet empêche une ligne de résumé comme celle-ci d’être ajoutée à votre sortie:

télécharger: s3: //mybucket/stream.txt à ../../dev/stdout

Vous pouvez essayer d’utiliser s3streamcat , il prend également en charge les formats bzip, gzip et xz.

Installer avec

sudo pip install s3streamcat

Usage:

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

Ah ha!

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

J’écris plus de caractères pour satisfaire à l’exigence de longueur.

Si vous souhaitez accomplir cela avec BASH, vous devrez appeler une application externe telle que l’ interface de ligne de commande AWS . Il n’a pas d’équivalent CAT, vous devrez donc copier le fichier localement, puis le CAT.

Vous pouvez également utiliser / écrire une application qui appelle directement le kit AWS SDK, disponible pour des langages tels que Python, PHP, Java. En utilisant le SDK, le contenu du fichier peut être récupéré en mémoire puis envoyé à stdout.