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



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

当我使用此方法并设置带有后缀"%0A"的密钥时,我没有收到任何错误,但文件未被删除。

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

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

以其他方式执行此操作时,首先需要确定"%0A"实际上是名称的一部分,还是 url 编码的 LF 字符 (""(。请记住,您可能也看不到其他不可打印的字符。确定这一点的最佳方法是在 Amazon 控制台中打开它,在服务菜单中选择 S3,找到您的存储桶并单击您的文件,记下对象的链接。

如果"%0A">

是名称的一部分,您将看到对象名称为"foo%0A",但在链接中它将看起来像"foo%250A"。在这种情况下,s3 rm s3://BUCKET/foo%0A应该可以解决问题。

如果"%0A"表示 url 编码的">

"字符,则您应该看到对象名称(就在制表符上方(只是"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,则需要将所有不可打印的字符嵌入到命令行参数中。如果您使用的是编程接口,则需要将它们嵌入到您提供给调用的密钥字符串中(例如,输入""而不是换行符(。虽然我认为这部分很明显。并相信一旦您看到包含所有不可打印内容的实际文件名,您就会知道该怎么做。

试试这个

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

为我工作。

最新更新