使用boto3,可以删除存储桶中的文件,如下所示
for object in bucket.objects.all():
if 'xyz' in object.key:
object.delete()
这会为每个文件发送一个REST API调用。如果您有大量文件,这可能需要很长时间。
有更快的方法吗?
答案 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)