2016-07-14 216 views
7

Ho un bucket S3 che contiene i backup del database. Sto creando uno script che mi piacerebbe scaricare l'ultimo backup (e eventualmente ripristinarlo da qualche altra parte), ma non sono sicuro di come aggirare solo il file più recente da un bucket.Download del file più recente in un bucket S3 utilizzando la CLI di AWS?

È possibile copiare solo il file più recente da un bucket s3 in una directory locale utilizzando gli strumenti CLI di AWS?

+0

Che cosa utilizzerai per lo scripting? SDK, CLI o qualcos'altro? Inoltre, come si denominano i file posteriori in S3 – error2007s

+0

Cosa intendi per più recente? i file non hanno nomi diversi? – Shibashis

+0

Stai usando il controllo delle versioni dei file s3? – Shibashis

risposta

13

Questo è un approccio che è possibile adottare.

è possibile elencare tutti gli oggetti nel secchio con aws s3 ls $BUCKET --recursive:

$ aws s3 ls $BUCKET --recursive 
2015-05-05 15:36:17   4 an_object.txt 
2015-06-08 14:14:44 16322599 some/other/object 
2015-04-29 12:09:29  32768 yet-another-object.sh 

Sono ordinati alfabeticamente per chiave, ma che prima colonna è la data dell'ultima modifica. Un rapido sort li riordina per data:

$ aws s3 ls $BUCKET --recursive | sort 
2015-04-29 12:09:29  32768 yet-another-object.sh 
2015-05-05 15:36:17   4 an_object.txt 
2015-06-08 14:14:44 16322599 some/other/object 

tail -n 1 seleziona l'ultima riga, e awk '{print $4}' estrae la quarta colonna (il nome dell'oggetto).

$ aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}' 
some/other/object 

Ultimo ma non meno importante, goccia che in aws s3 cp per scaricare l'oggetto:

$ KEY=`aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}'` 
$ aws s3 cp s3://$BUCKET/$KEY ./latest-object 
0

E qui è uno script bash creati in base all'appartenenza di @ error2007s risposta. Questo script richiede il tuo profilo aws e nome bucket come variabili e scarica l'ultimo oggetto nella tua cartella ~/Download:

#!/bin/sh 
PROFILE=your_profile 
BUCKET=your_bucket 

OBJECT="$(aws s3 ls --profile $PROFILE $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}')" 
aws s3 cp s3://$BUCKET/$OBJECT ~/Downloads/$OBJECT --profile $PROFILE