AWS CLI rm文件夹和一个特殊字符



我试图使用cli删除一个空文件夹结构,注意似乎正在工作。根文件夹是/+7000/,我肯定这是因为"+">

我的rm命令在没有特殊字符的其他文件夹上工作,cli没有返回错误。我如何构建这个脚本来识别这个文件夹并摆脱它?

测试脚本

(%2B is '+' in hex)
>aws s3 ls
2022-07-13 10:29:36          0 %2B7000/
>
>
//Attempts
> 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"
}
}

如果aws s3 rm不工作,您可以尝试'低级' API调用:

aws s3api delete-object --bucket namespace --key %2B7000/

考虑到你说%2B是+,根据你的评论,你可以使用:

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

我猜加号在某个地方被翻译成'URL Encode'语法。

另一种方法是使用AWS SDK(例如Python的boto3)来检索Key,然后通过传递确切的值来删除对象。这将避免过程中的任何编码。

最新更新