2016-07-14 27 views
7

Mam wiadro S3, które zawiera kopie zapasowe bazy danych. Tworzę skrypt, który chciałbym pobrać najnowszą kopię zapasową (i ewentualnie przywrócić ją gdzieś indziej), ale nie jestem pewien, jak to zrobić, tylko chwytając najnowszy plik z wiadra.Pobieranie najnowszego pliku w wiadrze S3 przy użyciu interfejsu AWS CLI?

Czy można skopiować tylko najnowszy plik z zasobnika s3 do lokalnego katalogu przy użyciu narzędzi AWS CLI?

+0

Do czego będziecie używać skryptów? SDK, CLI czy coś innego? Także jak nazwać pliki z powrotem w S3 – error2007s

+0

Co masz na myśli przez najnowsze? Czy pliki nie mają różnych nazw? – Shibashis

+0

Czy używasz wersjonowania plików s3? – Shibashis

Odpowiedz

13

To podejście można zastosować.

Można wymienić wszystkie obiekty w wiadrze z 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 

Są one sortowane alfabetycznie według klucza, ale pierwsza kolumna jest czas ostatniej modyfikacji. Szybkie sort będzie uporządkować je według daty:

$ 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 wybiera ostatni wiersz, a awk '{print $4}' wydobywa czwartą kolumnę (nazwa obiektu).

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

Last but not least, że spadnie do aws s3 cp ściągnąć obiektu:

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

I tu jest skrypt bash create na podstawie użytkownika @ error2007s odpowiedź. Ten skrypt wymaga profilu aws i nazwy wiadra jako zmiennych, a następnie pobiera najnowszy obiekt do folderu ~/Downloads:

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