除非我遗漏了什么,否则我所看过的所有api似乎都不会告诉您<S3 bucket>/<文件夹>中有多少对象。有办法统计一下吗?


当前回答

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

它提供了以下内容:

其他回答

3Hub已停产。有一个更好的解决方案,你可以使用传输(仅Mac),然后你只需连接到你的桶,并从视图菜单中选择显示项目计数。

没有一个API会给你一个计数,因为真的没有任何亚马逊特定的API来做这件事。您只需运行一个list-contents并计算返回的结果的数量。

旧线程,但仍然相关,因为我正在寻找答案,直到我明白了这一点。我想使用基于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个文件,并且在不到一分钟的时间内完成了文件计数。

api将以1000为增量返回列表。检查IsTruncated属性,看看是否还有更多。如果有,您需要进行另一次调用,并在下次调用时传递您获得的最后一个键作为Marker属性。然后继续这样循环,直到IsTruncated为false。

有关更多信息,请参阅亚马逊文档:遍历多页结果

您可以只执行这个cli命令来获取桶或特定文件夹中的总文件计数

扫描整个桶

aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l

可以使用该命令获取详细信息

aws s3api list-objects-v2 --bucket BUCKET_NAME

扫描特定文件夹

aws s3api list-objects-v2 --bucket testbucket --prefix testfolder --start-after testfolder/ | grep "Key" | wc -l

aws s3api list-objects-v2 --bucket BUCKET_NAME --prefix FOLDER_NAME --start-after FOLDER_NAME/ | grep "Key" | wc -l