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