2016-07-14 8 views
7

У меня есть ведро S3, содержащее резервные копии базы данных. Я создаю скрипт, который хотел бы загрузить последнюю резервную копию (и, в конечном итоге, восстановить ее где-то в другом месте), но я не уверен, как обойтись только для захвата самого последнего файла из ведра.Загрузка последнего файла в ведро S3 с использованием AWS CLI?

Возможно ли скопировать только последний файл из ведра s3 в локальный каталог с помощью инструментов AWS CLI?

+0

Что вы собираетесь использовать для написания сценариев? SDK, CLI или что-то еще? Также как вы называете обратные файлы в S3 – error2007s

+0

Что вы подразумеваете под последним? dont файлы имеют разные имена? – Shibashis

+0

Используете ли вы управление версиями s3? – Shibashis

ответ

13

Это подход, который вы можете предпринять.

Вы можете перечислить все объекты в ведре с 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 

Они сортируются в алфавитном порядке по ключу, но первый столбец последнего изменения времени. Быстрый sort будет изменять порядок их по дате:

$ 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 выбирает последнюю строку, а awk '{print $4}' извлекает четвертый столбец (имя объекта).

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

И последнее, но не в последнюю очередь, падение, что в aws s3 cp для загрузки объекта:

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

А вот сценарий Баш создать на основе @ error2007s отвечают. Этот скрипт требует, чтобы ваш профиль aws и имя ведра были переменными, и загружает последний объект в папку ~/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 
Смежные вопросы