我有一个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