8

我喜欢编写一个 boto python 脚本来从 s3 存储桶下载最新的文件,例如,我在 s3 存储桶中有 100 个文件,我需要在其中下载最近上传的文件。

有没有办法使用 python boto 从 S3 下载最近修改过的文件。

4

3 回答 3

14

您可以列出存储桶中的所有文件并找到最新的文件(使用 last_modified 属性)。

>>> import boto
>>> c = boto.connect_s3()
>>> bucket = c.lookup('mybucketname')
>>> l = [(k.last_modified, k) for k in bucket]
>>> key_to_download = sorted(l, cmp=lambda x,y: cmp(x[0], y[0]))[-1][1]
>>> key_to_download.get_contents_to_filename('myfile')

但是请注意,如果存储桶中有很多文件,这将非常低效。在这种情况下,您可能需要考虑使用数据库来跟踪文件和日期,以提高查询效率。

于 2012-11-05T20:31:16.433 回答
9

要添加到@garnaat 的答案,您可以通过prefix减少匹配文件来解决效率低下的问题。而不是c.lookup,此示例将仅搜索子存储subdir桶中以 开头的文件file_2014_

>>> import boto
>>> c = boto.connect_s3()
>>> bucket = c.get_bucket('mybucketname')
>>> bucket_files = bucket.list('subdir/file_2014_')
>>> l = [(k.last_modified, k) for k in bucket_files]
>>> key_to_download = sorted(l, cmp=lambda x,y: cmp(x[0], y[0]))[-1][1]
>>> key_to_download.get_contents_to_filename('target_filename')
于 2014-09-02T16:39:20.777 回答
3

S3 启动了存储桶http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html中文件的版本控制功能。

您可以通过调用 s3client.listVersions(request) 并根据需要指定 n 来获取最新的 n 个文件。请参阅http://docs.aws.amazon.com/AmazonS3/latest/dev/list-obj-version-enabled-bucket。 html

示例是在 java 中。不确定 boto 是否添加了用于版本控制的 API。

于 2015-03-13T00:14:41.153 回答