2016-07-14 187 views
7

我有一个包含数据库备份的S3存储桶。我正在创建一个脚本,我想下载最新的备份(并最终将其还原到其他地方),但我不知道如何才能从桶中获取最新文件。使用AWS CLI下载S3存储桶中的最新文件?

是否可以使用AWS CLI工具仅将最近的文件从s3存储桶复制到本地目录?

+0

你是什么东西的脚本会用? SDK,CLI或其他东西?另外你怎么命名后面的文件在S3 – error2007s

+0

你最近的意思是什么?不要这些文件有不同的名字? – 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

这里是一个bash脚本创建基于@ 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 
相关问题