2024-05-19 01:06:27 发布
网友
当谈到如何删除文件夹的内容时,documentation有点模棱两可。如果你看一下它是如何在boto3中完成的,键并没有在boto3的先行部分中定义,它只在boto2示例中定义。
删除文件夹内容的灵活(超过1000个文件)习惯用法是什么?
我认为你也不能在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'}}}] >>>
What's a flexible (more than a 1000 files) idiom that deletes the content of a folder?
没有。
S3中的主要资源是bucket中的对象(通过key标识)。
文件夹不是资源,也不是容器-- 它们是通过在对象键中存在/分隔符而创建的虚结构。(控制台可以创建的“空”文件夹只是一个零字节对象,其键以/结尾)。
/
因此,没有“删除文件夹及其所有内容”的习惯用法。甚至在控制台中实现这一点的能力也是通过向API发送delete或multi-object delete请求(限制为1000)。
生命周期策略还可用于删除具有给定密钥前缀的所有对象。这具有以天为单位的时间粒度,并且对象在创建后的指定天数内被删除,+1/-0天(它们可能比指定的实际时间长23:59:59,因为策略每天只计算一次,而不是实时计算)。
我认为你也不能在boto2中删除一个成语中的1000多个条目。但是,从boto3的角度来看,您可以尝试以下操作:
上面的东西已经过测试,正在工作
没有。
S3中的主要资源是bucket中的对象(通过key标识)。
文件夹不是资源,也不是容器-- 它们是通过在对象键中存在
/
分隔符而创建的虚结构。(控制台可以创建的“空”文件夹只是一个零字节对象,其键以/
结尾)。因此,没有“删除文件夹及其所有内容”的习惯用法。甚至在控制台中实现这一点的能力也是通过向API发送delete或multi-object delete请求(限制为1000)。
生命周期策略还可用于删除具有给定密钥前缀的所有对象。这具有以天为单位的时间粒度,并且对象在创建后的指定天数内被删除,+1/-0天(它们可能比指定的实际时间长23:59:59,因为策略每天只计算一次,而不是实时计算)。
相关问题 更多 >
编程相关推荐