Ruby:使用一个请求删除带前缀的所有S3对象

时间:2018-01-28 18:57:16

标签: ruby amazon-web-services amazon-s3

我目前这样做是为了删除文件夹中的S3对象/带有前缀:

require 'aws-sdk-s3'

bucket = Aws::S3::Resource.new.bucket('my-bucket')
bucket.objects(prefix: 'uploads/').map(&:delete)

对于数千个对象来说,这可能很慢。我希望通过一个请求删除这样的内容:

bucket.delete(prefix: 'uploads/')

我在文档中找不到类似的东西。这样的事情有可能吗?

2 个答案:

答案 0 :(得分:1)

您可以在单个请求中删除最多 1000个对象。见this API call

如果要删除超过1000个对象,则必须发出多个请求。

没有API调用允许您删除其密钥共享公共前缀的所有对象。

答案 1 :(得分:0)

另一种选择是在Object Lifecycle Management下定义一条规则,该规则要求在给定路径(前缀)中过期(删除)超过特定天数(例如一天)的对象。

此操作会自动删除免费的文件(而删除对象的API调用会产生费用)。但是,文件可能需要24小时才能删除。