我有一个包含数据库备份的S3存储桶。我正在创建一个脚本,我想下载最新的备份(并最终将其还原到其他地方),但我不知道如何才能从桶中获取最新文件。使用AWS CLI下载S3存储桶中的最新文件?
是否可以使用AWS CLI工具仅将最近的文件从s3存储桶复制到本地目录?
我有一个包含数据库备份的S3存储桶。我正在创建一个脚本,我想下载最新的备份(并最终将其还原到其他地方),但我不知道如何才能从桶中获取最新文件。使用AWS CLI下载S3存储桶中的最新文件?
是否可以使用AWS CLI工具仅将最近的文件从s3存储桶复制到本地目录?
这是您可以采取的方法。
可以列出在桶中的所有对象与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
这里是一个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
你是什么东西的脚本会用? SDK,CLI或其他东西?另外你怎么命名后面的文件在S3 – error2007s
你最近的意思是什么?不要这些文件有不同的名字? – Shibashis
你使用s3文件版本? – Shibashis