2015-02-04 31 views
42

Sto avviando uno script bash che eseguirà un percorso in S3 (come specificato nel comando ls) e riverserà il contenuto di tutti gli oggetti del file su stdout. In sostanza, mi piacerebbe replicare cat /path/to/files/* ad eccezione di S3, ad es. s3cat '/bucket/path/to/files/*'. La mia prima inclinazione a guardare le opzioni è di usare il comando cp in un file temporaneo e poi quello cat.Come utilizzare AWS S3 CLI per eseguire il dump dei file su stdout in BASH?

Qualcuno ha provato questo o simile o c'è già un comando che non trovo che lo fa?

+0

Io uso PHP e la classe Services_Amazon_S3 a fare cose simili. – Misunderstood

risposta

63

eseguire il dump del contenuto di tutti gli oggetti file su stdout.

È possibile raggiungere questo obiettivo se si passa - per destinazione di aws s3 cp comando. Ad esempio, $ aws s3 cp s3://mybucket/stream.txt -.

Quello che stai cercando di fare è qualcosa di simile? ::

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

Nota comunque che '-' come segnaposto per stdout non funziona in tutte le versioni di awscli. Ad esempio, la versione 1.2.9, che viene fornita con Ubuntu LTS 14.04.2, non la supporta. – antoniob

+0

Lo stesso. Sono su Ubuntu 12.x, e non funziona nella mia istanza di bash. –

+0

Il problema con questo è che non è possibile ottenere una versione specifica del file. – Eamorr

-1

Se si desidera eseguire ciò utilizzando BASH, sarà necessario chiamare ad un'app esterna come la AWS Command-Line Interface (CLI). Non ha un equivalente CAT, quindi è necessario copiare il file localmente e quindi CAT.

In alternativa, è possibile utilizzare/scrivere un'app che chiama direttamente l'SDK AWS, disponibile per le lingue come Python, PHP, Java. Utilizzando l'SDK, i contenuti dei file possono essere recuperati in memoria e quindi inviati a stdout.

+0

La risposta sopra elenca che è possibile utilizzare 'cp' con '-' come secondo argomento per far sì che il file venga stampato su stdout. –

18

Se si utilizza una versione del AWS CLI che non supporta la copia di "-" è anche possibile utilizzare/dev/stdout:

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

È inoltre può volere la --quiet bandiera per evitare che una riga di riepilogo come la seguente di essere aggiunto alla vostra uscita:

scaricare: S3: //mybucket/stream.txt per ../../dev/stdout

0

Si può provare a utilizzare s3streamcat, supporta anche i formati bzip, gzip e xz.

Installare con

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 
Problemi correlati