jho*_*ng7 7 amazon-s3 amazon-web-services
我知道此命令可以提供存储桶中所有文件的大小:
aws s3 ls mybucket --recursive --summarize --human-readable
但这不考虑版本控制。
如果我运行这个命令:
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
然后取所有版本大小的总和。
但是我必须为存储桶中的每个文件重新运行此命令。
有没有更简单的方法来做到这一点?
您可以list-object-versions在整个存储桶上运行:
aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].Size'
使用jq来概括:
aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].Size' | jq add
或者,如果您需要人类可读的输出:
aws s3api list-object-versions --bucket my-bucket --query 'Versions[*].Size' | jq add | numfmt  --to=iec-i --suffix=B
您还可以添加前缀,以防您想知道给定“文件夹”的大小,还可以获取版本对象的数量:
aws s3api list-object-versions --bucket my-bucket --prefix my-folder --query 'Versions[*].Size' | jq 'length|add'
或者您可以使用jq过滤来编写更复杂的过滤器,例如,仅包括非当前对象:
aws s3api list-object-versions --bucket my-bucket --prefix my-folder | jq '[.Versions[]|select(.IsLatest == false)|.Size] | length,add'
如果jq不可用,--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 存储清单提供的数据:
Amazon S3 清单每天或每周为 S3 存储桶或共享前缀(即名称以通用名称开头的对象)提供对象及其相应元数据的逗号分隔值 (CSV) 平面文件输出。细绳)。
| 归档时间: | 
 | 
| 查看次数: | 9105 次 | 
| 最近记录: |