我知道这个命令可以提供存储桶中所有文件的大小:
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
然后取所有版本大小的总和。
但我必须为存储桶中的每个文件重新运行此命令。
有更简单的方法吗?
答案 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,它将为所有版本提供结果。