Загрузка последнего файла в ведро S3 с использованием AWS CLI?
У меня есть ведро S3, содержащее резервные копии базы данных. Я создаю script, который хотел бы загрузить последнюю резервную копию (и, в конечном счете, восстановить ее где-то в другом месте), но я не уверен, как перейти только к захвату самого последнего файла из ведра.
Возможно ли скопировать только последний файл из корзины s3 в локальный каталог с помощью инструментов AWS CLI?
Ответы
Ответ 1
Это подход, который вы можете предпринять.
Вы можете перечислить все объекты в ведре с помощью 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
Ответ 2
И вот bash script создать на основе ответа @error2007s. Этот script требует, чтобы ваш профиль 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
Ответ 3
Решения Above - это Bash, если вы хотите сделать то же самое в Powershell для загрузки в Windows с помощью следующего сценария:
$s3location = 's3://bucket/'
$filename=C:\Progra~1\Amazon\AWSCLI\aws.exe s3 ls s3://bucket/PROD_FULL/ --
recursive | sort |select -last 3
$Dpath='I:\Data_S3'
foreach($files in $filename)
{
#$files.ToString()
$testpath1 = Split-Path $path -leaf
$testpath1
$path=$s3location+$files
C:\Progra~1\Amazon\AWSCLI\aws.exe s3 cp $path $Dpath
echo(" ***Files Downloaded ***")
}