如何判断我在S3存储桶中存储了多少个对象?

fie*_*lds 127 file count amazon-s3 amazon-web-services

除非我遗漏了某些内容,否则我看到的所有API都不会告诉您S3存储桶/文件夹(前缀)中有多少对象.有没有办法计算?

May*_*wal 218

使用AWS CLI

aws s3 ls s3://mybucket/ --recursive | wc -l 
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)

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

使用AWS Web Console

您可以查看cloudwatch的度量标准部分以获取大约存储的对象数. 在此输入图像描述

我有大约5000万件产品,用了一个多小时就算了 aws s3 ls

  • 这应该更接近顶部. (14认同)
  • @JosephMCasey我同意.这也可以用一个桶来给出目录中的对象数量:`aws s3 ls s3:// mybucket/mydirectory/--recursive | wc -l` (3认同)
  • 当我在 cmd 提示符下运行上述命令时出现此错误 - 'wc' 未被识别为内部或外部命令、可操作程序或批处理文件。- 我对此很陌生,所以有人可以提供解决方案吗? (2认同)
  • 这对于计算目录中的对象数量也非常有用:`ls dir | 厕所-l` (2认同)

adv*_*ncd 132

有一个--summarize开关包括桶摘要信息(即对象数,总大小).

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

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

Total Objects: 194273
Run Code Online (Sandbox Code Playgroud)

请参阅文档

  • 不幸的是,仍然存在列出数千个对象的主要开销(目前为600,000以上,因此这非常耗时) (10认同)
  • 呃 - 每 1000 个 LIST 请求 0.005 美元,每页结果是 1 个请求,cli 工具(和 API)默认且限制为一次请求中的 1000 个结果。所以 (1200000000/1000/1000)*0.005) = 6 美元。当然,其他存储层每 1k 请求的成本更高。AFAIK 费用不是按搜索/返回的每个对象收取的,而是按实际的 API 请求收取的。 (10认同)
  • 这很棒:`总物:7235``总大小:475566411749` - 这么简单. (4认同)
  • 这个答案效率极低,可能非常缓慢且成本高昂。它迭代整个存储桶以找到答案。 (4认同)
  • 我想补充一点,迭代存储在标准存储中的 12 亿多个对象可能会花费大约 6000 美元。 (4认同)
  • @CJohnson 你能提供给定的 6000 美元的计算依据吗? (2认同)

gva*_*uez 52

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

在此输入图像描述

其中提供以下内容:

在此输入图像描述

  • 这似乎只适用于文件夹级别.桶级别不提供"获取大小" (6认同)
  • @G-.但是,"全选"框仅选择页面中显示的文件夹和对象,而不是存储桶的所有文件夹/对象. (4认同)
  • 是的,新的 AWS 控制台虽然让我眼睛不舒服,但确实可以通过单击按钮来计算对象数量和总大小。 (2认同)
  • @G-。如果您选择存储桶的所有文件夹怎么办? (2认同)
  • @gparis好点。很值得一提。谢谢。因此看来,在控制台中,如果文件或文件夹的数量超过单个页面上显示的数量,我们将无法选择 (2认同)

小智 49

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

s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
Run Code Online (Sandbox Code Playgroud)

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

wc -l listing.txt
Run Code Online (Sandbox Code Playgroud)

  • 3 对此的注释。a.) 您应该使用 `aws s3 ls` 而不是 s3cmd,因为它更快。b.) 对于大桶,可能需要很长时间。100 万个文件大约需要 5 分钟。c.) 请参阅下面我关于使用 cloudwatch 的回答。 (2认同)

Rap*_*ael 43

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

aws s3api list-objects --bucket BUCKETNAME --output json --query "[length(Contents[])]"
Run Code Online (Sandbox Code Playgroud)

或者对于特定文件夹:

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

  • 这很有趣且值得注意,即使认为“s3api list-objects”命令应将自身限制为 1000 个页面大小,但当您执行此查询时,此限制不起作用。发出多次调用并返回对象总数。 (4认同)
  • 对于 __VERY__ 大桶,这是在合理的时间内(不到 20 分钟)对我有效的唯一解决方案 (3认同)
  • 拉斐尔,您的文件夹查询效果很好,除非文件夹为空或不存在,然后您会得到: **在函数 length() 中,值的无效类型: None,预期为以下之一: ['string', ' array', 'object'], returned: "null"** 有没有办法让它在文件夹为空或不退出时输出 0? (2认同)
  • 当仅使用“--bucket my-bucket”和“调用 ListObjects 时发生客户端错误 (NoSuchBucket)”时​​,我得到“非法令牌值 '(Contents[])]”(aws-cli 版本 1.2.9)操作:使用`--bucket s3://my-bucket`时指定的bucket不存在。(它确实存在,并且有 1000 多个文件。) (2认同)
  • This command seems to take forever (large bucket). (2认同)

mas*_*sta 37

您可以使用针对s3的AWS cloudwatch指标查看每个存储桶的确切计数. 选择存储桶时的cloudwatch指标


Tom*_*sen 33

除非你,否则没办法

  1. 将它们全部列在1000个批次中(这可能是缓慢而且带宽太大 - 亚马逊似乎永远不会压缩XML响应),或者

  2. 在S3上登录您的帐户,然后转到帐户 - 使用情况.看来,结算部门确切地知道您存储了多少对象!

如果您存储了5000万个对象,只需下载所有对象的列表实际上会花费一些时间并花费一些钱.

另请参阅有关StorageObjectCount的此主题 - 它位于使用数据中.

一个S3 API至少可以获得基础知识,即使它只是几个小时,也会很棒.

  • 您能否更新您的回复以包含@ MayankJaiswal的回复? (2认同)
  • 财务部门什么都知道!难怪他们有能力一不小心就拿下了s3东海岸 (2认同)

Mol*_*mby 13

2021年答案

此信息现在显示在 AWS 仪表板中。只需导航到存储桶并单击“指标”选项卡即可。

在此输入图像描述


veb*_*ben 9

2020/10/22

使用 AWS 控制台

使用 AWS Cloudwatch 的指标

使用 AWS CLI

对象数量:

或者:

aws s3api list-objects --bucket <BUCKET_NAME> --prefix "<FOLDER_NAME>" | wc -l
Run Code Online (Sandbox Code Playgroud)

或者:

aws s3 ls s3://<BUCKET_NAME>/<FOLDER_NAME>/ --recursive --summarize --human-readable | grep "Total Objects"
Run Code Online (Sandbox Code Playgroud)

或使用s4cmd

s4cmd ls -r s3://<BUCKET_NAME>/<FOLDER_NAME>/ | wc -l
Run Code Online (Sandbox Code Playgroud)

对象大小:

aws s3api list-objects --bucket <BUCKET_NAME> --output json --query "[sum(Contents[].Size), length(Contents[])]" | awk  'NR!=2 {print $0;next}  NR==2 {print $0/1024/1024/1024" GB"}'
Run Code Online (Sandbox Code Playgroud)

或者:

aws s3 ls s3://<BUCKET_NAME>/<FOLDER_NAME>/ --recursive --summarize --human-readable | grep "Total Size"
Run Code Online (Sandbox Code Playgroud)

或使用s4cmd

s4cmd du s3://<BUCKET_NAME>
Run Code Online (Sandbox Code Playgroud)

或使用 CloudWatch 指标:

aws cloudwatch get-metric-statistics --metric-name BucketSizeBytes --namespace AWS/S3 --start-time 2020-10-20T16:00:00Z --end-time 2020-10-22T17:00:00Z --period 3600 --statistics Average --unit Bytes --dimensions Name=BucketName,Value=<BUCKET_NAME> Name=StorageType,Value=StandardStorage --output json | grep "Average"
Run Code Online (Sandbox Code Playgroud)


小智 7

从 AWS CLI 的命令行中,使用ls plus --summarize. 它将为您提供所有项目的列表以及特定存储桶中的文档总数。我还没有尝试过使用包含子存储桶的存储桶:

aws s3 ls "s3://MyBucket" --summarize
Run Code Online (Sandbox Code Playgroud)

它花费的时间有点长(列出我的 16+K 文档大约需要 4 分钟),但它比一次数 1K 快。


pdm*_*pdm 7

如果您在 Windows 上使用 AWS CLI,则可以使用Measure-ObjectPowerShell 获取文件总数,就像wc -l在 *nix 上一样。

PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object

Count    : 25
Average  :
Sum      :
Maximum  :
Minimum  :
Property :
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。


小智 5

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


小智 5

如果您转到 s3 控制台的“管理”选项卡,然后单击“指标”,您可以轻松获取总计数和历史记录...选项卡的屏幕截图


roh*_*der 5

计算 s3 中对象数量的最简单方法之一是:

第 1 步:选择根文件夹

第2步:点击“操作”->“删除”(显然,要小心——不要删除它)

步骤 3:等待几分钟 aws 将显示对象的数量及其总大小。


Dev*_*Dan 5

自 2020 年 11 月 18 日起,现在有一种更简单的方法可以获取此信息,而无需对 API 请求造成负担:

AWS S3 存储镜头

默认的内置免费仪表板允许您查看所有存储桶或“存储桶”选项卡下单个存储桶的计数。有许多下拉菜单可以过滤和排序您想要寻找的几乎任何合理的指标。

在此输入图像描述

在此输入图像描述

  • 有这个的命令行选项吗? (4认同)