Amazon S3 boto - how to delete folder?

后端 未结 6 806
我寻月下人不归
我寻月下人不归 2020-11-30 23:40

I created a folder in s3 named \"test\" and I pushed \"test_1.jpg\", \"test_2.jpg\" into \"test\".

How can I use boto to delete folder \"test\"?

6条回答
  •  自闭症患者
    2020-11-30 23:59

    A slight improvement on Patrick's solution. As you might know, both list_objects() and delete_objects() have an object limit of 1000. This is why you have to paginate listing and delete in chunks. This is pretty universal and you can give Prefix to paginator.paginate() to delete subdirectories/paths

    client = boto3.client('s3', **credentials)
    paginator = client.get_paginator('list_objects_v2')
    pages = paginator.paginate(Bucket=self.bucket_name)
    
    delete_us = dict(Objects=[])
    for item in pages.search('Contents'):
        delete_us['Objects'].append(dict(Key=item['Key']))
    
        # flush once aws limit reached
        if len(delete_us['Objects']) >= 1000:
            client.delete_objects(Bucket=bucket, Delete=delete_us)
            delete_us = dict(Objects=[])
    
    # flush rest
    if len(delete_us['Objects']):
        client.delete_objects(Bucket=bucket, Delete=delete_us)
    

提交回复
热议问题