Amazon web services 使用AWS CLI下载S3存储桶中的最新文件?

Amazon web services 使用AWS CLI下载S3存储桶中的最新文件?,amazon-web-services,amazon-s3,aws-cli,Amazon Web Services,Amazon S3,Aws Cli,我有一个S3存储桶,其中包含数据库备份。我正在创建一个脚本,我想下载最新的备份并最终将其还原到其他地方,但我不知道如何从bucket中获取最新的文件 是否可以使用AWS CLI工具仅将最新文件从s3存储桶复制到本地目录?下面是基于@error2007s的答案创建的bash脚本。此脚本需要您的aws配置文件和bucket名称作为变量,并将最新对象下载到~/downloads文件夹: #!/bin/sh PROFILE=your_profile BUCKET=your_bucket OBJECT=

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


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

下面是基于@error2007s的答案创建的bash脚本。此脚本需要您的aws配置文件和bucket名称作为变量,并将最新对象下载到~/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

如果您想在Powershell中使用以下脚本在windows中下载相同的内容,则上述解决方案适用于Bash:

这假定AWS CLI exe在您的路径中。 $s3location=s3://存储桶名称 $files=$aws s3 ls$s3location-recursive | sort | select-last 3 $dlPath=C:\TEMP foreach$s3FileInfo在$files中{ $filename=$s3FileInfo.Split[-1] $path=${s3location}/${filename} aws s3 cp$path$dlPath echoDone正在将${path}下载到${dlPath} } $BUCKET\u NAME-是要从中下载的BUCKET

$FILE\u NAME\u FILTER-用作要匹配的名称的筛选器的字符串


aws s3 cp-它用双引号引起来,因为它还包括名称中有空格的文件。

您打算用什么来编写脚本?SDK、CLI还是其他什么?另外,您如何命名S3中的后台文件?您所说的最新文件是什么意思?这些文件不是有不同的名称吗?您使用的是s3文件版本控制吗?@error2007s我使用的是CLI。文件以几种不同的格式命名,但它通常包含名称和日期组件。我可能会做一些事情来解析日期,但如果我能避免的话,我宁愿不做。接受的答案是先前问题的接受答案的复制和粘贴副本。请看我在下面接受答案的评论。值得注意的是,AWS现在有云控制台,因此您可以直接从AWS控制台执行此操作。
FILE=`aws s3api list-objects-v2 --bucket "$BUCKET_NAME" --query 'reverse(sort_by(Contents[?contains(Key, \`$FILE_NAME_FILTER\`)], &LastModified))[:1].Key' --output=text`;aws s3 cp "s3://$BUCKET_NAME/$FILE" .