【问题标题】:unable to delete s3 key with special characters in it无法删除其中包含特殊字符的 s3 密钥
【发布时间】:2021-04-19 18:28:35
【问题描述】:

我有一个 s3 对象,其中有一个特殊字符 \x{1B}(A 的前面)

aws --profile myprofile s3api delete-object --bucket test-bucket --key `ABCD` --version 1234

当我尝试使用 cli 删除它时,由于特殊字符,它不尊重它。

如果我尝试通过 python 使用 boto3

bucket.object_versions.delete()

我明白了

botocore.exceptions.ClientError: An error occurred (MalformedXML) when calling the DeleteObjects operation: The XML you provided was not well-formed or did not validate against our published schema

如果我尝试从 UI 中删除,操作成功但对象并没有消失。

我希望永久删除该对象。 感谢任何指针。

【问题讨论】:

  • 您说通过 S3 管理控制台删除时“对象不会消失”。存储桶是否已激活版本控制?如果是这样,请激活列出版本选项并删除对象的所有版本。然后它就会消失。

标签: python-3.x amazon-s3 command-line-interface boto3 aws-cli


【解决方案1】:

不要使用反引号`使用单引号'。

在 Linux/Unix shell 中,反引号用于运行内联命令。

您可以使用printf 通过提供该特殊字符的十六进制代码来打印任何内容。例如,要将选项卡添加到键中,请使用:

--key `printf 'a\x09b'`

这一次,需要反引号。

【讨论】:

  • 我尝试了反引号和单引号。不起作用。遇到特殊字符的那一刻,它触发一个 ESC 清除控制台,让我有一半的语句 a 从 A 开始
  • @DJ_Stuffy_K 在这种情况下,请与他人分享您的特殊角色的身份。它是如何到达那里的?你用什么方法创建了一个不可打印字符的键?
  • @DJ_Stuffy_K 添加了另一个建议尝试使用printf
  • 有人创建并留下了它,我只是想清理它。特殊字符是\x{1B}
  • @DJ_Stuffy_K 在这种情况下,将上面示例中的 \x09 替换为 \x1b
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2018-09-04
  • 2020-09-08
相关资源
最近更新 更多