繁体   English   中英

如何使用boto3删除AWS桶中的文件夹及其内容

[英]How to delete folder and its content in a AWS bucket using boto3

在涉及如何删除文件夹的内容时, 文档有点模棱两可。 如果你看看它是如何为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'}}}]
>>>

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

没有一个。

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

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

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

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

你可以使用aws cli来做到这一点: https ://aws.amazon.com/cli/和一些unix命令。

这个aws cli命令应该工作:

aws s3 rm s3://<your_bucket_name> --recursive --exclude "*" --include "<your_regex>"

如果你想包含子文件夹,你应该添加标志--recursive

或使用unix命令:

aws s3 ls s3://<your_bucket_name>/ | awk '{print $4}' | xargs -I%  <your_os_shell>   -c 'aws s3 rm s3:// <your_bucket_name>  /% $1'

说明:

  1. 列出存储桶上的所有文件--pipe - >
  2. 获取第4个参数(它的文件名) --pipe - > //你可以用linux命令替换它以匹配你的模式
  3. 用aws cli运行删除脚本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM