You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AWS CLI仅列出S3存储桶中的空目录?

使用AWS CLI列出S3存储桶中的空目录

首先需要明确:S3本身没有真正的“目录”概念,所谓的目录都是通过对象键的前缀模拟出来的。要筛选空目录,本质是找出那些前缀下没有任何子对象(也没有子目录)的前缀。

以下是可行的命令组合(需要安装jq工具处理JSON输出):

# 获取存储桶中所有模拟的目录前缀
aws s3api list-objects-v2 --bucket your-bucket-name --delimiter '/' --query 'CommonPrefixes[].Prefix' | jq -r '.[]' | while read -r prefix; do
  # 统计当前前缀下的对象数量+子目录数量
  item_count=$(aws s3api list-objects-v2 --bucket your-bucket-name --prefix "$prefix" --delimiter '/' --query 'length(Contents) + length(CommonPrefixes)')
  # 如果统计数为0,说明该目录是空的
  if [ "$item_count" -eq 0 ]; then
    echo "$prefix"
  fi
done

命令解释:

  • aws s3api list-objects-v2 --bucket your-bucket-name --delimiter '/' --query 'CommonPrefixes[].Prefix':获取存储桶中所有一级目录前缀,--delimiter '/'会将前缀按目录分割,CommonPrefixes返回所有目录路径。
  • 遍历每个前缀,再次调用list-objects-v2统计该前缀下的对象(Contents)和子目录(CommonPrefixes)总数。
  • 当总数为0时,输出该前缀,即为空目录。

如果你不想依赖jq,可以用纯AWS CLI和Shell处理:

aws s3api list-objects-v2 --bucket your-bucket-name --delimiter '/' --output text --query 'CommonPrefixes[].Prefix' | while read -r prefix; do
  item_count=$(aws s3api list-objects-v2 --bucket your-bucket-name --prefix "$prefix" --delimiter '/' --output text --query 'length(Contents) + length(CommonPrefixes)')
  if [ "$item_count" -eq 0 ]; then
    echo "$prefix"
  fi
done

你之前使用的aws s3 ls bucket_name/ --recursive会列出存储桶中所有对象(包括文件和目录前缀),但无法直接区分空目录——因为它不会显示目录下的内容数量,所以需要结合list-objects-v2的查询功能实现筛选。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:07:08