将S3桶中最近上传的文件复制到本机



我有一个cron作业集,它将文件从EC2实例移动到S3

aws s3 mv --recursive localdir s3://bucket-name/ --exclude "*" --include "localdir/*"

之后,我在。bat文件中使用aws s3 sync s3://bucket-name/data1/ E:Datafolder,并在Windows中运行任务调度程序来运行命令。

问题是s3 sync命令复制/data1/前缀中的所有文件。

假设我有以下文件:

Day1: file1同步到本地。第2天:file1和file2被同步到本地,因为file1是从本地机器的文件夹中删除的。

我不希望它们占用本地机器的空间。在第2天,我只想把file2复制过来。

这可以通过AWS CLI命令完成吗?还是我需要写一个函数?

我遵循使用AWS CLI从S3获取最后修改对象的答案

但是在Windows上,|awk命令不能正常工作。

要获取最近一次Last Modified日期的对象的名称,您可以使用:

aws s3api list-objects-v2 --bucket BUCKET-NAME --query 'sort_by(Contents, &LastModified)[-1].Key' --output text
因此(使用shell语法),您可以使用:
object=`aws s3api list-objects-v2 --bucket BUCKET-NAME --prefix data1/ --query 'sort_by(Contents, &LastModified)[-1].Key' --output text`
aws s3 cp s3://BUCKET-NAME/$object E:Datafolder

你可能需要调整它以使它在Windows上工作。

基本上,它获取bucket清单,按LastModified排序,然后获取列表中最后一个对象的名称。

修改的答案与Windows.bat文件工作。使用Windows cmd.exe

for /f "delims=" %%i in ('aws s3api list-objects-v2 --bucket BUCKET-NAME --prefix data1/ --query "sort_by(Contents, &LastModified)[-1].Key" --output text') do set object=%%i
aws s3 cp s3://BUCKET-NAME/%object% E:Datafolder