将文件从s3复制到本地?

Copy file from the s3 to the local?

我的 s3 存储桶中有很多文件,是否有任何 aws cli 命令可用于在 s3 中查找具有前缀名称的最新文件?以及如何将该文件从 s3 复制到我的本地文件夹?我可以使用 Boto3 或 python 库来执行此操作吗?

最近的文件可以参考这个答案。 。对于要在对象列表中的前缀,您可以使用

aws s3 ls $BUCKET --recursive | sort | grep <prefix>

谢谢

阿希什

此命令将列出给定前缀的 'latest' 对象:

aws s3api list-objects --bucket MY-BUCKET --prefix foo/ --query 'sort_by(Contents, &LastModified)[-1].Key' --output text

您可以将它与复制命令结合使用:

key=$(aws s3api list-objects --bucket MY-BUCKET --prefix foo/ --query 'sort_by(Contents, &LastModified)[-1].Key' --output text)
aws s3 cp s3://MY-BUCKET/$key .

--query参数非常强大。参见:JMESPath Tutorial

Python 中的表演:

import boto3

s3_client = boto3.client('s3')

response = s3_client.list_objects_v2(Bucket='MY-BUCKET', Prefix='foo/')
objects = sorted(response['Contents'], key=lambda obj: obj['LastModified'])

## Latest object
latest_object = objects[-1]['Key']
filename = latest_object[latest_object.rfind('/')+1:] # Remove path

# Download it to current directory
s3_client.download_file('MY-BUCKET', latest_object, filename)

基本上,您会取回所有对象,然后按 LastModified 对它们进行排序。

请注意,list_objects_v2() 命令只能 returns 最多 1000 个对象。如果桶有更多,您将需要循环或使用分页器。参见:Paginators — Boto3 documentation