S3以编程方式删除以换行(%0A)结尾的文件?

时间:2018-09-07 20:49:56

标签: go amazon-s3

我在s3中有一堆文件,这些文件在控制台中显示为以“%0A”结尾。我想以编程方式删除这些文件。

当我使用this method并将键的后缀设置为“%0A”时,我没有出现任何错误,但是文件并未删除。

我不知道最初写入文件时的外观。

2 个答案:

答案 0 :(得分:2)

S3控制台应该能够删除它,无论它包含什么字符或它有多损坏(如果我们谈论的是同一件事)。您有足够的权限吗?

以其他方式执行此操作时,首先需要确定“%0A”是否实际上是名称的一部分或是URL编码的LF字符(“ \ n”)。请记住,您可能也看不到其他不可打印的字符。确定这一点的最佳方法是在Amazon Console中打开它,在Service菜单中选择S3,找到您的Bucket,然后单击您的文件,记下对象的Link。

如果名称中包含“%0A”,则对象名称将显示为“ foo%0A”,但是在链接中它将看起来像“ foo%250A”。在这种情况下,s3 rm s3://BUCKET/foo%0A应该可以解决问题。

如果“%0A”表示URL编码为“ \ n”字符,那么您应该看到对象名称(在选项卡上方)只是“ foo”,但是在URL中将看到“ foo%0A”作为对象名称。在这种情况下,您需要在发出s3 rm命令时在命令行中插入新行。这取决于您的操作系统。例如。在linux / unix上,您将这样输入:

aws-cli s3 rm 's3://BUCKET/foo
'

请注意引号,并且结束引号是在新行的开头。这将使新行成为作为命令行参数传递的值的一部分。

还要注意,aws-cli在某些系统上可能仅称为aws,但是以您提供的s3 rm命令为例,我假设您已经知道系统上的内容。如果在Windows上使用PowerShell,请使用反引号代替引号。

现在,检查对象的链接并查看那里还有哪些其他字符。查看您举报的示例和问题,我怀疑您的文件名中有不止一个。这里的重点是您的对象名称可能包含更多不可打印的字符,并且在S3控制台中看不到,但是Link将以URL编码的形式包含它们。因此,您可以从链接中提取实际的确切名称。请注意,您链接的aws-cli和程序化接口都使用真实名称,而不是URL编码。因此,如果您使用aws-cli,则需要将所有不可打印的字符嵌入命令行参数中。而且,如果您使用的是编程界面,则需要将其嵌入到您提供给调用的密钥字符串中(例如,放置“ \ n”而不是换行)。虽然我认为这部分很明显。并且相信一旦您看到包含所有非打印内容的实际文件名,您就会知道该怎么办。

答案 1 :(得分:0)

尝试

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

为我工作。