如何从S3 Bucket下载包含大量文件的最新文件

时间:2017-05-18 06:29:25

标签: amazon-s3 boto aws-cli

我的S3存储桶中有很多文件,我希望下载最近的1000个(按日期上传)。

如何使用AWS cli或s3 boto

继续这样做

2 个答案:

答案 0 :(得分:3)

您可以使用以下命令:

aws s3api list-objects --bucket <bucket> \
--query 'reverse(sort_by(Contents[].{Key: Key, LastModified: LastModified}, &LastModified))[:1000].[Key]' --output text | \ 
xargs -I {} aws s3 cp s3://<bucket>/{} .

我使用以下JMESPath函数:

  • sort_by:对json数组进行排序,在这种情况下,我将内容过滤为(Key,LastModified)参数,并将对LastModified属性进行过滤

  • reverse:需要反转结果,因为您需要最新的结果

  • [:x]:只接受数组的x个参数,在您的情况下需要1000个项目

  • 只读.[Key]作为数组的关键元素,以便我们可以将每个元素作为文本输出为新行

  • xargs -I {} aws s3 cp s3://<bucket>/{} .将复制先前从您的s3存储桶帐户找到的每个文件

答案 1 :(得分:1)

您可以使用以下代码从S3下载最新元素:

import boto
conn = boto.connect_s3()
bucket = conn.get_bucket('test-bucket')
bucket_files = bucket.list('subdir/file_2017_')
pointer = [(bucket_file.last_modified, bucket_file) for bucket_file in bucket_files]
key_to_download = sorted(pointer, cmp=lambda x,y: cmp(x[0], y[0]))[-1][1]
key_to_download.get_contents_to_filename('target_filename')