删除Amazon S3中文件的最快方法

时间:2017-12-29 16:15:56

标签: amazon-web-services amazon-s3 delete-file boto3

使用boto3,可以删除存储桶中的文件,如下所示

for object in bucket.objects.all():
    if 'xyz' in object.key:
        object.delete()

这会为每个文件发送一个REST API调用。如果您有大量文件,这可能需要很长时间。

有更快的方法吗?

3 个答案:

答案 0 :(得分:1)

删除文件的最简单方法是使用Amazon S3 Lifecycle Rules。只需指定前缀和年龄(例如创建后1天),S3将为您删除文件!

但是,这不一定是删除它们的最快方式 - 可能需要24小时才能执行规则。

如果您确实想自己删除对象,请使用delete_objects()代替delete_object()。每次调用最多可以接受1000个密钥,这比单独删除每个对象要快。

答案 1 :(得分:0)

有很多方法可以完成你的要求。

使用Python的列表推导,获取符合条件的对象列表:

myobjects = [{'Key':obj.key} for obj in bucket.objects.all() if 'xyz' in obj.key]

myobjects中存储要删除的对象后,请致电bulk delete

bucket.delete_objects(Delete={ 'Objects': myobjects})
  

<强> delete_objects(** kwargs)

     

此操作使您可以删除多个对象   来自使用单个HTTP请求的存储桶。您最多可以指定1000个   密钥。

如果有超过1000个密钥,那么循环遍历列表,在每次迭代中切片1000个密钥并调用delete_objects()

答案 2 :(得分:0)

Boto提供对MultiDelete的支持。这是您如何使用它的示例:

import boto.s3
conn = boto.s3.connect_to_region('us-east-1')  # or whatever region you want
bucket = conn.get_bucket('mybucket')
keys_to_delete = ['mykey1', 'mykey2', 'mykey3', 'mykey4']
result = bucket.delete_keys(keys_to_delete)