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

c7rzv4ha  于 2023-10-14  发布在  Go
关注(0)|答案(3)|浏览(149)

我在s3中有一堆文件,在控制台中显示为以“%0A”结尾。我想以编程方式删除这些文件。
当我使用此方法并设置后缀为“%0A”的键时,我没有得到任何错误,但文件没有被删除。
我不知道文件最初写的时候是什么样子。

b1zrtrql

b1zrtrql1#

S3控制台应该能够删除它,无论它包含什么字符或它是多么破碎(如果我们谈论的是同一件事)。你有足够的权限吗?
当使用其他方法时,首先需要弄清楚“%0A”实际上是名称的一部分还是URL编码的LF字符(“\n”)。请记住,您可能也看不到其他不可打印的字符。确定这一点的最佳方法是在Amazon Console中打开它,在服务菜单中选择S3,找到您的Bucket并单击文件,注意对象的链接。
如果“%0A”是名称的一部分,您将看到对象名称为“foo%0A”,但在链接中它看起来像“foo%250A”。在这种情况下,s3 rm s3://BUCKET/foo%0A应该可以完成这个任务。
如果“%0A”表示一个url编码的“\n”字符,那么你应该看到对象名称(就在选项卡上方)只是“foo”,但在url中会看到“foo%0A”作为对象名称。在这种情况下,您需要在发出s3 rm命令时将新行嵌入到密钥中。这取决于你的操作系统。例如,在Linux/unix上,你可以这样输入:

  1. aws-cli s3 rm 's3://BUCKET/foo
  2. '

注意引号,结束引号位于新行的开头。这将使new line成为作为命令行参数传递的值的一部分。
还要注意的是,aws-task在某些系统上可能只被称为aws,但如果您提供了s3 rm命令作为示例,我假设您已经知道它在您的系统上是什么。如果在Windows上使用PowerShell,请使用反引号代替引号。
现在,检查对象的链接,看看还有什么其他字符。看看你的例子和你报告的问题,我怀疑你的文件名中有不止一个。重要的一点是,您的对象名称可能包含更多不可打印的字符,并且您不会在S3控制台中看到这些字符,但Link将以URL编码的形式包含它们。因此,您可以从链接中提取实际的确切名称。请注意,你链接的aws-xml和编程接口都使用实际的名称,而不是url编码的名称。所以,如果你使用aws-xml,你需要将所有不可打印的字符嵌入到命令行参数中。如果你使用编程接口,你需要将它们嵌入到你提供给调用的键字符串中(例如,用“\n”代替新行)。不过,我觉得这部分很明显。相信你会知道该怎么做,一旦你看到你的实际文件名与所有的非打印在它。

展开查看全部
dojqjjoe

dojqjjoe2#

试试这个

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

对我很有效

31moq8wy

31moq8wy3#

我可以通过运行以下命令删除以换行符结尾的文件夹:

  1. aws s3 rm "s3://BUCKET-NAME/FOLDER-NAME
  2. >
  3. >
  4. > /" --recursive

s3://BUCKET-NAME/FOLDER-NAME后面的两行是换行符。我只是按了两次回车键来创建两个换行符。

相关问题