如何在您拥有的所有 S3 存储桶中找到最大的文件

How to find the biggest files in all S3 buckets you have

我的客户有 60 多个存储桶,我们每个月要支付数百美元来存储这些数据,而且我们不知道如何轻松区分有用的和遗留的。

单击每个存储桶并查找占用的内容 space 很乏味。

有没有办法首先列出所有存储桶中的所有文件并找到占用最多的文件space,这样我们就可以清除旧的和大的文件?

最初,我没有找到任何简单的方法。所以我一直在使用下面的 Bash 脚本来构建文件列表并计算每个存储桶的总大小。这个脚本仍然有用,因为我有另一个脚本可以进一步解析它。

请注意,如果您有超过 500GB 的存储桶和大量文件,命令 aws s3api list-object-versions 可以 运行 一夜之间消耗超过 15GB 的 RAM。我不知道它是否可以完成,我没有 32GB,所以我不得不停止它。否则,它很快。

但是,如果您只是寻找最大的存储桶,那么直接在 AWS S3 控制台中最简单。

在左侧导航中,在 Storage Lens 下,单击 Dashboards。 您会看到您的 S3 仪表板,您可能像我一样默认有一个,称为 default-account-dashboard 如果您不需要,则需要创建一个。

打开此仪表板。滚动到底部,您会看到最大的区域和桶。

Bash 脚本

# list buckets for current account
aws s3api list-buckets > s3-list-buckets
# store clean list of buckets in env var
s3_buckets=$(grep \"Name s3-list-buckets  | cut -c 22- | rev | cut -c 3- | rev)
# list all objects in all buckets
for bucket in $s3_buckets
do
   echo "begin $bucket"
   [ -e all_files_bucket_$bucket ] && continue
   aws s3api list-object-versions --bucket $bucket > all_files_bucket_$bucket
   echo "completed download list for $bucket"
done
# display sum of all files per bucket, sorted by biggest bucket last
for bucket in $s3_buckets; do echo "$(grep "Size.:."  all_files_bucket_$bucket | awk -F : '{print }' | awk -F , {'print '} | paste -sd+ | bc) bytes in $bucket" ; done | sort -n