使用boto3清空s3存储桶的最快方法是什么?

Tus*_*ras 8 python python-2.7 boto3

我正在考虑删除然后重新创建存储桶(我后来意识到的错误选项).

那么如何从桶中删除所有对象?

我试过这个:http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.delete_objects

但它删除了多个对象并非全部.

你能建议什么是空桶的最佳方法吗?

moo*_*oot 25

只需使用aws cli.

aws s3 rm s3://mybucket --recursive
Run Code Online (Sandbox Code Playgroud)

好吧,如果你坚持使用boto3,可以获得更长的答案.这将向s3发送删除标记.无需文件夹处理.bucket.Object.all将创建一个不限制为1K的迭代器.

import boto3    
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
# suggested by Jordon Philips 
bucket.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)

  • 您也可以只执行`bucket.objects.all().delete()`,但如果您的存储桶版本较多,它会变得有点复杂 (6认同)
  • 看起来你现在可以跳过 `.all()` 并只执行 `bucket.objects.delete()` 。https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Bucket.objects。 (5认同)
  • @TusharNiras,在引擎盖下boto3将使用[`delete_objects`](http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.delete_objects),当你使用那个片段时,所以您将每页对象发出一个请求(一次最多1000个).这是没有线程的速度. (2认同)
  • @Davos不过,第二秒后,我删除了bucket.delete(),以防测试脚本的人删除其存储桶。 (2认同)

Gon*_*ard 17

根据之前的响应,并添加启用版本控制的检查,您可以清空存储桶,启用或不启用版本:

s3 = boto3.resource('s3')
s3_bucket = s3.Bucket(bucket_name)
bucket_versioning = s3.BucketVersioning(bucket_name)
if bucket_versioning.status == 'Enabled':
    s3_bucket.object_versions.delete()
else:
    s3_bucket.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)


kgu*_*win 16

如果启用了版本控制,则会调用其他答案以删除所有对象版本:

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket-name')
bucket.object_versions.delete()
Run Code Online (Sandbox Code Playgroud)