当前位置: 首页 > 知识库问答 >
问题:

将文件从s3复制到本地?

宋宇
2023-03-14

我的s3存储桶中有很多文件,所以是否有任何aws cli命令可用于在s3中查找带有前缀名的最新文件?如何将该文件从s3复制到本地文件夹?我可以使用Boto3或python库来实现这一点吗?

共有3个答案

龚星洲
2023-03-14

您可以参考此答案了解最新的文件。从S3 CLI获取上次修改的对象。对于要在对象列表中显示的前缀,可以使用

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

谢谢

阿施施

太叔航
2023-03-14

此命令将列出给定前缀的“最新”对象:

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教程

百里嘉泽
2023-03-14

下面是用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()命令最多只返回1000个对象。如果桶中有更多,则需要循环或使用分页器。参见:分页器-Boto3文档

 类似资料:
  • 有没有一种方法可以将文件列表从一个S3存储桶复制到另一个存储桶?两个S3存储桶都在同一个AWS帐户中。我可以使用aws cli命令一次复制一个文件: 然而,我有1000份文件要复制。我不想复制源存储桶中的所有文件,因此无法使用sync命令。有没有一种方法可以用需要复制的文件名列表来调用一个文件,从而自动化这个过程?

  • 我想每小时将更新的文件从本地文件系统复制到Hadoop,因为我想放入cron。我可以使用任何hadoop命令将更新的文件从本地复制到Hadoop吗?

  • 是否可以将文件从源AWS S3 bucket发送/同步到位于不同位置的不同AWS帐户上的目标S3 bucket? 我发现了以下内容:https://aws.amazon.com/premiumsupport/knowled-center/copy-s3-objects-account/ 但是如果我理解正确的话,这就是如何从目标帐户同步文件的方法。 有没有别的方法可以做呢?从源帐户访问目标桶(使用源

  • 如何将文件从HDFS复制到本地文件系统。文件下没有文件的物理位置,甚至没有目录。我如何将它们移到本地进行进一步的验证。我通过winscp进行了尝试。

  • 我已经成功地完成了在Amazon EMR上的工作,现在我想将结果从复制到,但是我遇到了一些问题 这是代码(--steps) 这是日志: