如何删除/计算s3存储桶中的对象?

时间:2009-03-31 15:20:08

标签: list amazon-s3 bucket

所以我知道这是一个常见的问题,但似乎没有任何好的答案。

我有一个带有gobs的桶(我不知道有多少)其中的文件数量。它们都在2k以内。

1)如何确定我有多少这些文件没有列出?    我已经使用了s3cmd.rb,aws / s3和jets3t的东西,我能找到的最好的是一个计算前1000条记录的命令(真正对它们执行GETS)。

我一直在使用jets3t的applet,因为它非常适合使用,但即使我无法列出所有对象,因为我的堆空间不足。 (可能是因为它正在对所有这些进行GETS并将它们保存在记忆中)

2)我怎样才能删除一个桶?    我见过的最好的事情是一个并行的删除循环,这有问题,因为有时它会尝试删除相同的文件。这就是我遇到的所有'deleteall'命令。

你们曾经吹嘘自己拥有数百万张图片/ txts?如果要删除它会发生什么?

3)最后,是否有替代答案?所有这些文件都是txt / xml文件所以我甚至不确定S3是如此关注 - 也许我应该把它移到一个文档数据库中?

它归结为亚马逊S3 API直接缺少2个非常重要的操作 - COUNT和DEL_BUCKET。 (实际上有一个删除存储桶命令,但只有当存储桶为空时它才有效)如果有人提出了一个不吸引这两个操作的方法,我很乐意放弃许多赏金。

更新

回答几个问题。我问这个的原因是我在过去一年左右的时间里已经存储了数十万,更像是数百万的2k txt和xml文档。几个月前的最后一次,我希望删除它确实需要DAYS这样做的存储桶,因为存储桶必须是空的才能删除它。这是一个如此痛苦的屁股,我担心在没有API支持的情况下再次这样做。

更新

这会晃动房子!

http://github.com/SFEley/s3nuke/

我在几分钟内就完成了一对价值1-2k档的好几个演出。

7 个答案:

答案 0 :(得分:1)

我肯定不是那些吹嘘承载数百万张图片/ txts的家伙之一,因为我只有几千张,这可能不是你想要的答案,但我看了看这一段时间。

根据我的记忆,有一个名为HEAD的API命令,它获取有关对象的信息,而不是检索GET所做的完整对象,这可能有助于计算对象。

至于删除Buckets,在我看的时候,API肯定声明存储桶必须是空的,所以你需要先删除所有对象。

但是,我从未使用这些命令中的任何一个,因为我使用S3作为备份,最后我编写了一些例程,将我想要的文件上传到S3(因此该部分是自动化的),但从未打扰过等式的恢复/删除/文件管理方面。为此使用Bucket Explorer,它完成了我所需要的一切。在我的情况下,不值得花时间50美元,我可以得到一个我需要的程序。可能还有其他人也这样做(例如CloudBerry)

在您的情况下,使用Bucket Explorer,您可以右键单击存储桶并选择删除或右键单击并选择属性,它将计算对象的数量和它们占用的大小。它当然不会下载整个对象。 (例如,我看到的最后一个桶是12Gb和大约500个文件,下载12GB需要几个小时,而大小和计数会在一两秒内返回)。如果有限制,那肯定不是1000。

希望这有帮助。

答案 1 :(得分:1)

“列表”不会检索数据。我使用s3cmd(一个python脚本),我会做这样的事情:

s3cmd ls s3://foo | awk '{print $4}' | split -a 5 -l 10000 bucketfiles_
for i in bucketfiles_*; do xargs -n 1 s3cmd rm < $i & done

但首先要检查你得到多少个bucketfiles_文件。每个文件将运行一个s3cmd。

这需要一段时间,但不是几天。

答案 2 :(得分:0)

1)关于您的第一个问题,您可以在不实际检索它们的情况下列出存储桶中的项目。您可以使用SOAPREST API执行此操作。如您所见,您可以定义要列出的最大项目数和从(标记)开始列表的位置。阅读更多相关信息here

我不知道分页的任何实现,但特别是对于REST接口,用任何语言实现它都非常容易。

2)我认为删除存储桶的唯一方法是先从所有项目中清空它。另请参阅此question

3)我会说S3非常适合存储大量文件。但这取决于你想做什么。你打算还存储二进制文件吗?您是否需要执行任何查询或仅列出文件就足够了?

答案 3 :(得分:0)

我从桶中删除了数十万个文件时遇到了同样的问题。启动EC2实例以运行并行删除可能是值得的,因为S3的延迟很低。我认为有一些资金要托管一堆EC2服务器,并指示人们快速删除存储桶。 (至少在亚马逊改变API之前)

答案 4 :(得分:0)

旧线程,但仍然相关,因为我正在寻找答案,直到我想出这个。我想使用基于GUI的工具(即没有代码)进行文件计数。我碰巧已经使用一个名为3Hub的工具进行拖动和放大丢弃与S3之间的转移。我想知道我在特定存储桶中有多少文件 (我不认为结算会将其分解为存储桶)。

So, using 3Hub, 
- list the contents of the bucket (looks basically like a finder or explorer window)
- go to the bottom of the list, click 'show all'
- select all (ctrl+a)
- choose copy URLs from right-click menu
- paste the list into a text file (I use TextWrangler for Mac) 
- look at the line count  

我在存储桶中有20521个文件,并在不到一分钟的时间内完成了文件计数。

我想知道是否有人找到了更好的方法,因为这需要花费一些时间来处理数十万个文件。

答案 5 :(得分:0)

计算S3存储桶中的对象:

转到AWS Billing,然后报告,然后转到AWS Usage报告。 选择Amazon Simple Storage Service,然后选择Operation StandardStorage。 下载CSV文件,其中包含UsageTypeCount的UsageType,其中列出了每个存储桶的项目计数。

答案 6 :(得分:0)

计数

aws s3 ls s3://mybucket/ --recursive | wc -l 

From this post

删除

aws s3 rm --recursive s3://mybucket/ && aws s3 rb s3://mybucket/

这将删除所有项目,然后是存储桶。