You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过aws s3 ls或s3api查询S3存储桶level2层级文件夹/对象大小?

当然可以!针对你这种嵌套结构的S3存储桶,我们完全可以用aws s3 ls或者aws s3api工具配合简单的文本处理工具来实现需求。下面给你两种实用的方案,根据你的需求选择就行:

方案1:用aws s3 ls快速列出对象大小

aws s3 ls是最常用的S3查看工具,加上参数就能直接过滤并提取你要的信息:

如果你只想看level2路径下所有对象(包括子文件夹里的)的路径和大小,直接运行:

aws s3 ls s3://myBucket/level1/level2/ --recursive | awk '{print "对象路径: " $4, "大小: " $3 " 字节"}'

要是想让大小显示成更易读的单位(比如KB/MB),加上--human-readable参数:

aws s3 ls s3://myBucket/level1/level2/ --recursive --human-readable | awk '{print "对象路径: " $5, "大小: " $3}'

参数说明:

  • --recursive:递归列出指定前缀下的所有对象(包括子路径里的)
  • --human-readable:把字节数转换成KB/MB/GB这类友好单位
  • awk:用来提取输出里的大小和路径字段,调整$3/$4/$5对应不同输出列

如果只想看level2直接下属的对象(不包含子文件夹里的),去掉--recursive即可:

aws s3 ls s3://myBucket/level1/level2/ --human-readable
方案2:用aws s3api+jq实现更灵活的处理

如果需要更复杂的筛选或者格式输出,aws s3api返回的JSON格式会更方便,配合jq(一款JSON处理工具)能轻松定制输出:

列出所有对象的路径和字节大小

aws s3api list-objects-v2 --bucket myBucket --prefix "level1/level2/" --query 'Contents[].{路径: Key, 大小: Size}' | jq -r '.[] | "\(.路径) \(.大小) 字节"'

自动转换为友好单位(KB/MB/GB)

如果想直接看到易读的大小单位,可以用jq写个小脚本处理:

aws s3api list-objects-v2 --bucket myBucket --prefix "level1/level2/" --query 'Contents[].{路径: Key, 大小: Size}' | jq -r '
# 定义转换友好单位的函数
def humanize(size):
  if size >= 1024*1024*1024 then "\(size/(1024*1024*1024)|floor) GB"
  elif size >= 1024*1024 then "\(size/(1024*1024)|floor) MB"
  elif size >= 1024 then "\(size/1024|floor) KB"
  else "\(size) B"
  end;
# 输出路径和转换后的大小
.[] | "\(.路径) \(.humanize(.大小))"
'

统计子文件夹的总大小

如果你的level2下面还有子文件夹(S3里其实是前缀),想统计每个子文件夹的总大小,可以用这个循环脚本:

# 先获取level2下所有子前缀(即子文件夹)
aws s3api list-objects-v2 --bucket myBucket --prefix "level1/level2/" --delimiter "/" --query 'CommonPrefixes[].Prefix' | jq -r '.[]' | while read prefix; do
  # 计算当前前缀下所有对象的总大小
  total_size=$(aws s3api list-objects-v2 --bucket myBucket --prefix "$prefix" --query 'sum(Contents[].Size)')
  echo "文件夹: $prefix 总大小: $total_size 字节"
done

注意点

S3本身没有真正的“文件夹”概念,所有的层级都是对象Key里的前缀。上面的命令都是基于前缀过滤来模拟文件夹的操作,确保你的前缀路径结尾带/,避免匹配到类似level2abc这样的前缀哦。

内容的提问来源于stack exchange,提问作者Alec

火山引擎 最新活动