如何获取带有版本控制的S3存储桶中所有文件的大小?

时间:2017-03-31 22:28:26

标签: amazon-web-services amazon-s3

我知道这个命令可以提供存储桶中所有文件的大小:

aws s3 ls mybucket --recursive --summarize --human-readable

但这并不考虑versioning

如果我运行此命令:

aws s3 ls s3://mybucket/myfile --human-readable

它会显示类似“100 MiB”的内容,但它可能有10个版本的此文件,更像是“1 GiB”。

我最接近的是获取给定文件的每个版本的大小:

aws s3api list-object-versions --bucket mybucket --prefix "myfile" --query 'Versions[?StorageClass=`STANDARD`].Size' > /tmp/s3_myfile_version_sizes

然后取所有版本大小的总和。

但我必须为存储桶中的每个文件重新运行此命令。

有更简单的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以在存储桶上整体运行list-object-versions

aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].Size'

不幸的是,使用--output text选项会导致以制表符分隔的值,因此这是强制它分隔行然后加总的黑客攻击:

aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].[Size,Size]' --output text  | awk '{s+=$1} END {printf "%.0f", s}'

如果你有大量的对象,最好使用Amazon S3 Storage Inventory提供的数据:

  

Amazon S3广告资源为S3存储桶或共享前缀(即每日或每周)提供对象的逗号分隔值(CSV)平面文件输出及其对应的元数据,名称以公共字符串开头的对象。)

答案 1 :(得分:0)

使用CloudWatch,它将为所有版本提供结果。