我需要从 s3 存储桶中获取昨天的所有文件,当我知道文件名时我知道如何在 CLI 中执行此操作:
#aws s3 cp s3:{Path}/{FileName} {diretoryToCopyTo}
但是我该如何对特定日期的文件执行此操作?只需获取特定日期的文件名列表即可,无论使用哪种方法,都不需要 CLI。
问题在于:该存储桶中有几百万个文件,因此我也在寻找一种经济有效的方法。
答案1
如果文件名包含日期,则可以使用包含和排除过滤器:
aws s3 cp s3:{path}/ {directoryToCopyTo} --exclude "*" --include "*2019-09-09*"
如果日期仅存在于文件元数据中,则目前没有按日期进行服务器端过滤的方法。 github 上有一个讨论,其中威尔斯特鲁宾有一个使用方法s3api
:
s3api
这是使用和函数执行此操作的方法--query
。这已在 OSX 上进行了测试:aws s3api list-objects --bucket "bucket-name" --query 'Contents[?LastModified>=2016-05-20][].{Key: Key}'
然后您可以使用 jq 或 grep 进行过滤,以使用其他 s3api 函数进行处理。编辑:不确定为什么它们没有显示,但您必须使用反引号将查询的日期括起来
...但这不会减少 api 调用的数量,因为过滤是在客户端完成的。