我怎样才能知道我在S3存储桶中存储了多less个对象?
除非我错过了一些东西,否则我所看过的任何API都不会告诉你S3桶/文件夹(前缀)中有多less个对象。 有什么方法可以得到一个计数?
没有办法,除非你
-
将它们全部批量列出1000个(这可能是缓慢的和吸取带宽 – 亚马逊似乎从不压缩XML响应),或者
-
在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指标来查看每个存储分区的确切数量。
虽然这是一个老问题,并且在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更快。