首页 文章

如何通过aws cli重命名亚马逊s3中的“PREFIX”?

提问于
浏览
4

据我所知,在亚马逊s3中,there's only buckets and objects . 文件夹和所有文件都不在同一个存储桶中,并且看起来位于文件夹中的对象只在其文件名前面有一个前缀 .

现在我的问题是......有没有办法使用AWS CLI更改PREFIX?

2 回答

  • 1

    是的,但不容易 . 请记住,"prefix"只是文件名的一部分,更改前缀将要求您重命名其中包含该前缀的每个文件 - 例如,如果您的存储桶包含以下文件,并且您想要将 /oldprefix/ 重命名为 /newprefix/

    /oldprefix/file1.txt
    /oldprefix/file2.txt
    /oldprefix/folder/anotherfile.txt
    

    您需要执行三个*操作来完成前缀的更改:每个对象一个 . 没有办法在一次操作中重命名它们 . 通常,您应该尝试避免需要大规模重命名的情况,因为这可能是一个相当漫长的过程 .

    *:如果你想对它挑剔,实际上不需要三个但需要 six 操作,因为重命名一个对象是通过先将其复制到新名称然后删除原始文件而分两步完成的 . 但是,许多S3客户端和库将为您处理此细节 .

  • -1

    [编辑]我意识到我的答案没有完全回答OP,正如几个人所指出的那样,可以使用更多的信息 .

    通常,AWS CLI for S3将查找指定存储桶AND前缀下的对象 . 如果包含前缀,则在匹配对象时忽略对象名称的该部分 .

    例如,假设您在存储桶备份的两个文件夹中有多个映像 . 您的对象名称可能如下照片/ gradu / image1.jpg .

    您可以使用以下命令将内部文件夹(在本例中为毕业)以及该文件夹中的所有文件复制到顶层:

    aws s3 cp s3://backup/photos s3://backup --recursive
    

    这会将存储桶备份中的所有文件与前缀照片进行匹配 . 它会将这些文件复制到备份桶中,并将它们命名为剥离前缀后留下的内容 - 因此在这种情况下,它们将命名为gradu / image1.jpg .

    请注意,原始文件仍将位于原始文件夹中 . 要真正模拟前缀的重命名,您需要删除旧文件 .

    aws rm s3://backup/photos/graduation --recursive
    

    完成后,您将在存储桶的根级别下拥有图像的毕业文件夹,而在照片文件夹下则没有 . 换句话说,您已将照片/毕业中的前缀重命名为毕业 .

    不幸的是,似乎你不能使用mv命令在同一个存储桶中执行此操作 - 它失败并显示错误"Cannot mv a file onto itself" .

相关问题