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

如何使用AWS CLI删除含特殊字符'+'的S3空文件夹?

如何删除AWS S3中含特殊字符+的空文件夹

我尝试用AWS CLI删除一个空文件夹结构,但所有操作均未生效。该根文件夹为/+7000/,问题明确出在特殊字符+上。我的rm命令在不含特殊字符的其他文件夹上可正常工作,且CLI未返回错误信息。该如何编写脚本识别并删除此文件夹?

测试脚本

(%2B是'+'的十六进制编码)
> aws s3 ls
2022-07-13 10:29:36          0 %2B7000/

//尝试的命令
> aws s3 rm s3://namespace/ --exclude "*" --include "%2B7000/"
> aws s3 rm s3://namespace/ --exclude "*" --include "*7000/"
> aws s3 rm s3://namespace/ --exclude "*" --include "[+]7000/"
> aws s3 rm s3://namespace/ --exclude "*" --include "'+7000'/"
> aws s3 rm s3://namespace/"\+7000/"
> aws s3 rm s3://namespace/%2B7000/
delete: s3://namespace/%2B7000/

大多数尝试都返回删除成功,但文件夹仍然存在。

aws s3api list-objects --bucket namespace 的输出

{
  "Key": "+7000/",
  "LastModified": "2022-07-13T14:29:36.884Z",
  "ETag": "\"100\"",
  "Size": 0,
  "StorageClass": "STANDARD",
  "Owner": {
        "DisplayName": "vmsstg",
        "ID": "1-2-3-4"
   }
}

解决方案

方法1:直接用s3api删除对象

S3中的“文件夹”本质是大小为0的对象,直接指定原始Key(+7000/)执行删除即可:

aws s3api delete-object --bucket namespace --key "+7000/"

注意给+7000/加引号,避免Shell解析特殊字符。

方法2:正确转义后使用s3 rm

如果坚持用s3 rm命令,可通过以下两种方式确保Shell正确传递原始字符:

  • 用单引号包裹路径:
aws s3 rm 's3://namespace/+7000/'
  • 用反斜杠转义+:
aws s3 rm s3://namespace/\+7000/

方法3:批量处理脚本(适用于多个特殊字符空文件夹)

如果需要批量识别并删除桶内所有带特殊字符的空文件夹,可使用以下脚本:

#!/bin/bash
BUCKET="namespace"

# 列出所有大小为0的对象(即空文件夹标记)
aws s3api list-objects-v2 --bucket $BUCKET --query "Contents[?Size==0].Key" --output text | while read KEY; do
  # 删除每个空对象
  aws s3api delete-object --bucket $BUCKET --key "$KEY"
  echo "Deleted: $KEY"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:54:29