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


当前回答

最简单的方法是使用开发人员控制台,例如,如果你是chrome浏览器,选择开发人员工具,你可以看到下面,你可以找到和计数或做一些匹配,如280-279 + 1 = 2

...

其他回答

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

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

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

wc -l listing.txt

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

截至2020年11月18日,现在有一种更简单的方法来获取这些信息,而无需对API请求征税:

AWS S3存储镜头

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

@Mayank Jaiswal提到的关于使用cloudwatch指标的问题实际上不应该是一个问题。如果你没有得到结果,那可能是因为你的范围不够广。现在是11月3日,无论我做什么尝试,我都没有得到结果。我打开s3桶,查看计数,“对象总数”计数的最后一个记录是11月1日。

下面是cloudwatch解决方案使用javascript aws-sdk的样子:

import aws from 'aws-sdk';
import { startOfMonth } from 'date-fns';

const region = 'us-east-1';
const profile = 'default';
const credentials = new aws.SharedIniFileCredentials({ profile });
aws.config.update({ region, credentials });

export const main = async () => {
  const cw = new aws.CloudWatch();
  const bucket_name = 'MY_BUCKET_NAME';

  const end = new Date();
  const start = startOfMonth(end);

  const results = await cw
    .getMetricStatistics({
      // @ts-ignore
      Namespace: 'AWS/S3',
      MetricName: 'NumberOfObjects',
      Period: 3600 * 24,
      StartTime: start.toISOString(),
      EndTime: end.toISOString(),
      Statistics: ['Average'],
      Dimensions: [
        { Name: 'BucketName', Value: bucket_name },
        { Name: 'StorageType', Value: 'AllStorageTypes' },
      ],
      Unit: 'Count',
    })
    .promise();

  console.log({ results });
};

main()
  .then(() => console.log('Done.'))
  .catch((err) => console.error(err));

请注意两点:

范围的开始被设置为月初 周期设置为一天。如果少了一点,您可能会得到一个错误,说您请求了太多的数据点。

也可以用gsutil du(是的,一个谷歌云工具)

gsutil du s3://mybucket/ | wc -l