【问题标题】:How to delete folder and its content in a AWS bucket using boto3如何使用 boto3 删除 AWS 存储桶中的文件夹及其内容
【发布时间】:2019-06-18 17:53:25
【问题描述】:

documentation 在谈到如何删除文件夹的内容时有点模棱两可。如果你看一下它是如何为 boto3 完成的,key 并没有在 boto3 前面的部分中定义,它只在 boto2 示例中定义。

什么是删除文件夹内容的灵活(超过 1000 个文件)惯用语?

【问题讨论】:

标签: python amazon-web-services amazon-s3 boto3


【解决方案1】:

我认为您也不能在 boto2 中的单个习语中删除 1000 多个项目。但是,从 boto3 的角度来看,您可以尝试以下操作:

s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket-name')
bucket.objects.filter(Prefix="path/to/dir").delete()

以上内容已经过测试并且正在运行

>>> import boto3
>>> s3 = boto3.resource('s3')
>>> b = s3.Bucket('MY_BUCKET_NAME')
>>> b.objects.filter(Prefix="test/stuff")
s3.Bucket.objectsCollection(s3.Bucket(name='MY_BUCKET_NAME'), s3.ObjectSummary)
>>> list(b.objects.filter(Prefix="test/stuff"))
[s3.ObjectSummary(bucket_name='MY_BUCKET_NAME', key=u'test/stuff/new')]
>>> b.objects.filter(Prefix="test/stuff").delete()
[{u'Deleted': [{u'Key': 'test/stuff/new'}], 'ResponseMetadata': {'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HostId': 'BASE64_ID_1', 'RequestId': 'REQ_ID', 'HTTPHeaders': {'x-amz-id-2': 'BASE64_ID_2', 'server': 'AmazonS3', 'transfer-encoding': 'chunked', 'connection': 'close', 'x-amz-request-id': 'REQ_ID', 'date': 'Fri, 12 May 2017 21:21:47 GMT', 'content-type': 'application/xml'}}}]
>>>

【讨论】:

  • 它没有用。我收到大量错误,其中一个错误说,如果 VALID_BUCKET.search(bucket) 为 None: typeError : expected string or buffer
  • 为我工作!谢谢
  • 根据 AWS 文档,此方法仅删除前 1000 个文件。
【解决方案2】:

什么是删除文件夹内容的灵活(超过 1000 个文件)惯用语?

没有。

S3 中的主要资源是存储桶中的对象(由键标识)。

文件夹不是资源,也不是容器—— 它们是为了方便而创建的虚构结构,在对象键中存在/ 定界符。 (可以由控制台创建的“空”文件夹只是一个零字节对象,其键以/ 结尾)。

因此,没有“删除文件夹及其所有内容”的习语。即使在控制台中完成此操作的能力是通过向 API 发送删除或多对象删除请求(限制为 1000 个)。

生命周期策略也可用于删除具有给定键前缀的所有对象。这有一个以天为单位的时间粒度,并且对象在创建后的指定天数内被删除,+1/-0 天(它们可能会持续最多 23:59:59,比自政策以来指定的实际时间长每天只评估一次——不是实时的)。

【讨论】:

  • 谢谢你,迈克尔。这实际上非常有见地
猜你喜欢
  • 1970-01-01
  • 2017-07-15
  • 2021-10-18
  • 1970-01-01
  • 2019-08-21
  • 2015-07-21
  • 2015-06-06
  • 2016-07-12
  • 1970-01-01
相关资源
最近更新 更多