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 objets de fichier dans stdout
. Essentiellement, j'aimerais répliquer cat /path/to/files/*
à l'exception de S3, par exemple. s3cat '/bucket/path/to/files/*'
. Ma première tendance à examiner les options consiste à utiliser la commande cp
dans un fichier temporaire, puis à cat
.
Quelqu'un a-t-il essayé ceci ou quelque chose de similaire ou existe-t-il déjà une commande que je ne trouve pas qui la fait?
vide le contenu de tous les objets de fichier sur 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, c'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 souhaiter que l'indicateur --quiet
empêche l'ajout à votre sortie d'une ligne de résumé semblable à celle-ci:
télécharger: s3: //mybucket/stream.txt to ../../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
Utilisation:
s3streamcat s3://bucketname/dir/file_path
s3streamcat s3://bucketname/dir/file_path | more
s3streamcat s3://bucketname/dir/file_path | grep something