我怎样才能知道我在S3存储桶中存储了多less个对象?

除非我错过了一些东西,否则我所看过的任何API都不会告诉你S3桶/文件夹(前缀)中有多less个对象。 有什么方法可以得到一个计数?

没有办法,除非你

  1. 将它们全部批量列出1000个(这可能是缓慢的和吸取带宽 – 亚马逊似乎从不压缩XML响应),或者

  2. 在S3上login你的账户,然后去账户 – 使用。 看起来结算部门确切地知道你已经存储了多less个对象!

如果您有五千万个对象存储,简单地下载所有对象的列表将花费一些时间并花费一些钱。

另请参阅有关StorageObjectCount的此线程 (位于使用情况数据中)。

至less要获得基础知识的S3 API,即使是几个小时,也是很棒的。

使用AWS CLI

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

要么

 aws cloudwatch get-metric-statistics \ --namespace AWS/S3 --metric-name NumberOfObjects \ --dimensions Name=BucketName,Value=BUCKETNAME \ Name=StorageType,Value=AllStorageTypes \ --start-time 2016-11-05T00:00 --end-time 2016-11-05T00:10 \ --period 60 --statistic Average 

注意:上面的cloudwatch命令似乎有一段时间不适用于其他人。 在这里讨论: https : //forums.aws.amazon.com/thread.jspa? threadID =217050

使用AWS Web Console

您可以查看cloudwatch的度量部分以获取大约存储的对象。 在这里输入图像说明

我有大约五千万个产品,花了一个多小时的时间来计算使用aws s3 ls

如果使用s3cmd命令行工具,则可以获取特定存储区的recursion列表,并将其输出到文本文件。

 s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt 

然后在Linux中,你可以在文件上运行一个wc -l来计算行数(每个对象1行)。

 wc -l listing.txt 

S3 API现在有一个简单的解决scheme(在AWS cli中可用):

 aws s3api list-objects --bucket BUCKETNAME --output json --query "[length(Contents[])]" 

或为特定的文件夹:

 aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]" 

我在这里看到很多答案 | wc -l

但是,没有人提到 – 总结显示桶概要信息(即对象数量,总大小)的开关

所以,下面是使用AWS cli的正确答案:

 aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:" Total Objects: 194273 

欲了解更多信息,请访问: http : //docs.aws.amazon.com/cli/latest/reference/s3/ls.html#description

您可以使用s3的AWS cloudwatch指标来查看每个存储分区的确切数量。 选择存储区时的Cloudwatch指标

虽然这是一个老问题,并且在2015年提供了反馈,但现在更简单了,因为S3 Web控制台启用了“获取大小”选项:

在这里输入图像说明

其中提供了以下内容:

在这里输入图像说明

在s3cmd中,只需运行以下命令(在Ubuntu系统上):

 s3cmd ls -r s3://mybucket | wc -l 

转到AWS账单,然后报告,然后使用AWS使用情况报告。 selectAmazon Simple Storage Service,然后selectStandardStorage操作。 然后,您可以下载包含StorageObjectCount的UsageType的CSV文件,该文件列出了每个存储桶的项目数量。

没有一个API会给你一个计数,因为真的没有任何亚马逊特定的API来做到这一点。 你必须运行一个列表内容并计算返回的结果数量。

api将以1000为增量返回列表。检查IsTruncated属性以查看是否还有更多。 如果有,则需要重新拨打另一个电话,并在下一个呼叫中传递您作为标记属性获取的最后一个键。 然后,您将继续像这样循环,直到IsTruncated为false。

请参阅Amazon文档获取更多信息: 通过多页结果进行迭代

老线程,但仍然相关,因为我正在寻找答案,直到我只是想出了这一点。 我想要一个使用基于GUI的工具(即无代码)的文件计数。 我碰巧已经使用了一个名为3Hub的工具来进行S3和S3的拖放传输。 我想知道我在一个特定的存储桶中有多less个文件(我不认为计费是通过存储桶来分解的)。

 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个文件,并在不到一分钟的时间内完成文件计数。

3Hub已停产。 有一个更好的解决scheme,您可以使用传输 (仅限Mac),然后您只需连接到您的存储桶,并从View菜单中selectShow Item Count

我使用scalablelogic.com的python脚本(在countlogging中添加)。 工作很好。

 #!/usr/local/bin/python import sys from boto.s3.connection import S3Connection s3bucket = S3Connection().get_bucket(sys.argv[1]) size = 0 totalCount = 0 for key in s3bucket.list(): totalCount += 1 size += key.size print 'total size:' print "%.3f GB" % (size*1.0/1024/1024/1024) print 'total count:' print totalCount 

您可以从http://s3browser.com/下载并安装s3浏览器。; 当您在中心右上angularselect一个存储桶时,您可以看到存储桶中的文件数量。 但是,它显示的大小在当前版本中是不正确的。

广东商学院

最简单的方法是使用开发者控制台,例如,如果你使用的是开发者工具,你可以看到下面的代码,你可以find并计数或者做一些匹配,比如280-279 + 1 = 2

从AWS CLI的命令行中,使用ls plus --summarize 。 它会给你所有的项目清单和一个特定的桶中的文件总数。 我还没有尝试过使用包含子桶的桶:

 aws s3 ls "s3://MyBucket" --summarize 

这需要花费很长时间(我的16 + K文件大约需要4分钟),但是它比一次计算1K更快。