我在s3中有一堆文件,在控制台中显示为以“%0A”结尾。我想以编程方式删除这些文件。当我使用此方法并设置后缀为“%0A”的键时,我没有得到任何错误,但文件没有被删除。我不知道文件最初写的时候是什么样子。
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上,你可以这样输入:
s3 rm s3://BUCKET/foo%0A
s3 rm
aws-cli s3 rm 's3://BUCKET/foo'
aws-cli s3 rm 's3://BUCKET/foo
'
注意引号,结束引号位于新行的开头。这将使new line成为作为命令行参数传递的值的一部分。还要注意的是,aws-task在某些系统上可能只被称为aws,但如果您提供了s3 rm命令作为示例,我假设您已经知道它在您的系统上是什么。如果在Windows上使用PowerShell,请使用反引号代替引号。现在,检查对象的链接,看看还有什么其他字符。看看你的例子和你报告的问题,我怀疑你的文件名中有不止一个。重要的一点是,您的对象名称可能包含更多不可打印的字符,并且您不会在S3控制台中看到这些字符,但Link将以URL编码的形式包含它们。因此,您可以从链接中提取实际的确切名称。请注意,你链接的aws-xml和编程接口都使用实际的名称,而不是url编码的名称。所以,如果你使用aws-xml,你需要将所有不可打印的字符嵌入到命令行参数中。如果你使用编程接口,你需要将它们嵌入到你提供给调用的键字符串中(例如,用“\n”代替新行)。不过,我觉得这部分很明显。相信你会知道该怎么做,一旦你看到你的实际文件名与所有的非打印在它。
dojqjjoe2#
试试这个
aws s3 rm "bucket_name"$'\r' --recursive
对我很有效
31moq8wy3#
我可以通过运行以下命令删除以换行符结尾的文件夹:
aws s3 rm "s3://BUCKET-NAME/FOLDER-NAME>>> /" --recursive
aws s3 rm "s3://BUCKET-NAME/FOLDER-NAME
>
> /" --recursive
s3://BUCKET-NAME/FOLDER-NAME后面的两行是换行符。我只是按了两次回车键来创建两个换行符。
s3://BUCKET-NAME/FOLDER-NAME
3条答案
按热度按时间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上,你可以这样输入:注意引号,结束引号位于新行的开头。这将使new line成为作为命令行参数传递的值的一部分。
还要注意的是,aws-task在某些系统上可能只被称为aws,但如果您提供了s3 rm命令作为示例,我假设您已经知道它在您的系统上是什么。如果在Windows上使用PowerShell,请使用反引号代替引号。
现在,检查对象的链接,看看还有什么其他字符。看看你的例子和你报告的问题,我怀疑你的文件名中有不止一个。重要的一点是,您的对象名称可能包含更多不可打印的字符,并且您不会在S3控制台中看到这些字符,但Link将以URL编码的形式包含它们。因此,您可以从链接中提取实际的确切名称。请注意,你链接的aws-xml和编程接口都使用实际的名称,而不是url编码的名称。所以,如果你使用aws-xml,你需要将所有不可打印的字符嵌入到命令行参数中。如果你使用编程接口,你需要将它们嵌入到你提供给调用的键字符串中(例如,用“\n”代替新行)。不过,我觉得这部分很明显。相信你会知道该怎么做,一旦你看到你的实际文件名与所有的非打印在它。
dojqjjoe2#
试试这个
对我很有效
31moq8wy3#
我可以通过运行以下命令删除以换行符结尾的文件夹:
s3://BUCKET-NAME/FOLDER-NAME
后面的两行是换行符。我只是按了两次回车键来创建两个换行符。