9

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

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

1)我如何弄清楚我有多少这些文件而不列出它们?我使用了 s3cmd.rb、aws/s3 和 jets3t 的东西,我能找到的最好的方法是计算前 1000 条记录的命令(真正对它们执行GETS)。

我也一直在使用 jets3t 的小程序,因为它非常好用,但即使我无法列出所有对象,因为我的堆空间用完了。(大概是因为它正在对所有这些执行GETS并将它们保存在内存中)

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

你们那些吹嘘托管数百万张图片/txt的人做了什么?当你想删除它时会发生什么?

3)最后,是否有其他答案?所有这些文件都是 txt/xml 文件,所以我什至不确定 S3 是否值得关注——也许我应该将其移至各种文档数据库?

归结为,亚马逊 S3 API 直接缺少 2 个非常重要的操作—— COUNT 和 DEL_BUCKET。(实际上有一个删除桶命令,但它只在桶为空时才有效)如果有人想出一种不糟糕的方法来执行这两个操作,我很乐意放弃很多赏金。

更新

只是为了回答几个问题。我问这个的原因是我在过去一年左右一直在存储数十万,更像是数百万个 2k txt 和 xml 文档。上一次,几个月前,我希望删除它确实需要 DAYS 天才能删除的存储桶,因为存储桶必须是空的,然后才能删除它。在没有 API 支持的情况下,我担心再次这样做是一件非常痛苦的事情。

更新

这把房子震撼了!

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

我在几分钟内就获得了价值 1-2k 文件的好几场演出。

4

7 回答 7

1

我肯定不是那些“吹嘘拥有数百万张图片/txt”的人之一,因为我只有几千张,这可能不是您要寻找的答案,但我看了一会儿背部。

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

至于删除Buckets,我当时看的时候,API明确说bucket必须是空的,所以你需要先删除所有的对象。

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

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

希望这可以帮助。

于 2009-07-16T12:33:01.893 回答
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。

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

于 2009-07-22T06:28:30.223 回答
0

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

于 2009-07-22T08:02:09.457 回答
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 个文件,并且在不到一分钟的时间内完成了文件计数。

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

于 2014-02-15T23:09:06.330 回答
0

1)关于您的第一个问题,您可以列出存储桶中的项目,而无需实际检索它们。您可以使用SOAPREST API 来做到这一点。如您所见,您可以定义要列出的最大项目数以及开始列出的位置(标记)。在此处阅读更多相关信息。

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

2)我相信删除存储桶的唯一方法是首先从所有项目中清空它。另请参阅此问题

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

于 2009-07-16T12:34:03.920 回答
0

To count objects in an S3 bucket:

Go to AWS Billing, then reports, then AWS Usage reports. Select Amazon Simple Storage Service, then Operation StandardStorage. Download a CSV file that includes a UsageType of StorageObjectCount that lists the item count for each bucket.

于 2015-06-17T15:55:48.313 回答
0

数数

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

从这个帖子

删除

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

这将删除每个项目,然后是存储桶。

于 2021-03-20T15:41:26.953 回答