【问题标题】:AWS S3API move files from a folder to another within the same bucketAWS S3API 将文件从一个文件夹移动到同一存储桶中的另一个文件夹
【发布时间】:2018-05-10 19:49:40
【问题描述】:

我需要执行类似的命令:

aws s3api 复制对象 --copy-source bucket-1 --key *.txt --bucket bucket-1/文件夹/

我在存储桶的根目录中有许多 txt 文件,我想将它们移动到同一个存储桶内的文件夹中。

非常感谢。

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    您可以使用高级s3 api:

    aws s3 mv s3://bucket/object.txt s3://bucket/folder/object.txt

    但是,您需要指定完整的对象名称 - 通配符不起作用。

    您可以使用脚本迭代存储桶内容,使用 Linux cut 命令提取对象名称,然后对每个对象名称执行 aws s3 mv 操作。将以下内容另存为script.sh

       #!/bin/bash
       IFS=$'\n'
       while read LINE; do
         OBJECT=`echo $LINE | cut -d ' ' -f 5`
         aws s3 mv s3://bucket/$OBJECT s3://bucket/folder/
       done < objects.txt
    

    上面从objects.txt文件中读取每一行,cuts该行只读取对象键字段(又名文件名),然后将该字段传递给aws s3 mv命令。

    然后你会这样运行:

       chmod +x script.sh // remember to make the script executable
       aws s3 ls s3://bucket/ > objects.txt
       ./script.sh
    

    请注意,如果您有数百个文本文件,这可能会导致 S3 存储桶受到限制。如果您有这么多文件,我建议您在上面的 while 循环中添加一个小延迟,以确保您每秒发送的请求少于 100 个。

    20 毫秒的延迟意味着您每秒向 S3 发送 50 个请求。在这种情况下,可能需要几秒钟才能完全执行,但考虑到这是一次性操作,这应该是可以接受的。

    编辑重要!您可能希望在 while 循环中添加检查,以确保在执行 mv 之前文件名以 .txt 结尾。这将确保您只移动文本文件。

    【讨论】:

    • 我可以使用类似mv s3://bucket/*.txt s3://bucket2/*.txt 的东西吗?
    • 不,您不能使用通配符 (*)。
    • 如此强制我必须创建一个循环并通过循环逐个移动?哇
    • 很遗憾,是的。
    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多