Amazon web services 无法删除包含错误字符的Amazon S3密钥

Amazon web services 无法删除包含错误字符的Amazon S3密钥,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我最近才开始使用S3。我无意中制作了一个包含坏字符的密钥,现在我无法列出该文件夹的内容,也无法删除该坏密钥。(此后,我增加了检查,以确保我不再这样做) 我最初使用的是2008年的一个旧的“S3”python模块。现在我已经切换到boto-2.0,但仍然无法删除它。我在网上做了很多研究,问题似乎是我有一个无效的XML字符,所以这似乎是一个最低级别的问题,到目前为止没有API起到帮助作用 我最终联系了Amazon,他们说使用来自的“s3curl.pl”。我下载了,这是我的钥匙: <Key>

我最近才开始使用S3。我无意中制作了一个包含坏字符的密钥,现在我无法列出该文件夹的内容,也无法删除该坏密钥。(此后,我增加了检查,以确保我不再这样做)

我最初使用的是2008年的一个旧的“S3”python模块。现在我已经切换到boto-2.0,但仍然无法删除它。我在网上做了很多研究,问题似乎是我有一个无效的XML字符,所以这似乎是一个最低级别的问题,到目前为止没有API起到帮助作用

我最终联系了Amazon,他们说使用来自的“s3curl.pl”。我下载了,这是我的钥匙:

<Key>info/&#x1b;[01</Key>
info/&x1b;[01
我想当时我在一些文件上做了一个快速的bash循环,我设置了“lscolors”,所以发生了这种情况

我试过了
/s3curl.pl--id--key--X DELETEhttps://mybucket.s3.amazonaws.com/info/;[01

(还尝试将URL放在单引号/双引号中,并尝试转义“[”)

URL上没有引号,它会挂起。有引号时,我会得到“curl:(3)[globbing]错误:pos 50后的范围规范不正确”。我编辑了s3-curl.pl以执行
curl--globoff
,但仍然会得到此错误


非常感谢您的帮助。

您可以从中使用s3cmd工具。您首先需要运行

s3cmd fixbucket <bucket name that contains bad file>.
s3cmd fixbucket。
然后,您可以使用删除文件

s3cmd del <bucket>/<file>
s3cmd del/

在我的例子中,键中有换行符(但是发生了…)。我能够用aws cli修复它,如下所示:

aws cli rm "s3://my_bucket/Icon"$'\r'
我还启用了版本控制,因此我还需要对所有版本执行此操作(启用版本视图时,版本ID在UI中可见):

aws s3api删除对象--bucket my_bucket--key“Icon”$'\r'--版本id

我最近遇到这种情况,请列出您可以使用的项目:

aws s3api列表-objects-v2——bucket my_bucket——编码类型url

坏键将返回url编码,如下所示:

“密钥”:“%01%C3%B4%C2%B3%C3%8Bu%C2%A5%27%40yr%3E%60%0EQ%14%C3%A5.gif”

空格变成了
+
,我必须把它们改成
%20
*
没有编码,我必须用
%2A
替换它们,然后才能删除它们


要真正删除它们,我无法使用aws cli,因为它会对已经URL编码的密钥进行URL编码,从而生成404,因此为了避免这种情况,我用delete动词手动点击rest API。

我最近遇到了这种情况。我的bucket末尾有一个newline。下面的命令解决了这个问题

 aws s3 rm "bucket_name"$'\r' --recursive

这解决了问题,只需删除主文件夹:

aws s3 rm "s3://BUCKET_NAME/folder/folder" --recursive

如果您尝试从位于的AWS控制台访问它会发生什么情况?如果我尝试查看文件夹或尝试删除文件夹,AWS控制台界面会显示“发生错误”。
aws s3 rm "s3://BUCKET_NAME/folder/folder" --recursive