快速查找S3'文件夹的大小'

b15*_*b15 9 amazon-s3 amazon-web-services aws-sdk

我们有s3'文件夹'(带有前缀在桶下的对象),有数百万个文件,我们想要弄清楚这些文件夹的大小.

编写我自己的.net应用程序来获取s3对象的列表很容易,但每个请求的最大键数是1000,所以它需要永远.

使用S3Browser查看"文件夹"属性也需要很长时间.我猜是出于同样的原因.

我已经将这个.NET应用程序运行了一周 - 我需要一个更好的解决方案.

有更快的方法吗?

小智 11

AWS CLIls命令可以这样做:aws s3 ls --summarize --human-readable --recursive s3://$BUCKETNAME/$PREFIX --region $REGION


deb*_*gme 11

我更喜欢使用 AWSCLI。我发现当对象太多时,Web 控制台经常会超时。

  • 将 s3://bucket/ 替换为您想要开始的位置。
  • 依赖于 awscli、awk、tail 和一些类似 bash 的 shell
start=s3://bucket/ && \
for prefix in `aws s3 ls $start | awk '{print $2}'`; do
  echo ">>> $prefix <<<"
  aws s3 ls $start$prefix --recursive --summarize | tail -n2
done
Run Code Online (Sandbox Code Playgroud)

或以一行形式:

start=s3://bucket/ && for prefix in `aws s3 ls $start | awk '{print $2}'`; do echo ">>> $prefix <<<"; aws s3 ls $start$prefix --recursive --summarize | tail -n2; done
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样:

$ start=s3://bucket/ && for prefix in `aws s3 ls $start | awk '{print $2}'`; do echo ">>> $prefix <<<"; aws s3 ls $start$prefix --recursive --summarize | tail -n2; done
>>> extracts/ <<<
Total Objects: 23
   Total Size: 10633858646
>>> hackathon/ <<<
Total Objects: 2
   Total Size: 10004
>>> home/ <<<
Total Objects: 102
   Total Size: 1421736087
Run Code Online (Sandbox Code Playgroud)


Fil*_*ddo 9

似乎 AWS 添加了一个菜单项,可以在其中查看大小:

S3文件夹的大小


Mat*_*oSp 5

我认为理想的解决方案不存在。但我提供了一些你可以进一步发展的想法:

  1. 该应用程序是将文件写入 S3 的唯一方式吗?如果是这样,您可以存储(在数据库、文件或其他任何地方)文件大小并在必要时对其进行求和
  2. 并发调用 LIST api
  3. 您可以从基于文件夹的组织切换到基于存储桶的组织吗?如果是这样,您可以查询计费 API(是的,计费)并根据成本计算大小(或近似值)...