AWS S3API将文件从文件夹移动到同一存储桶中的另一个文件夹

时间:2018-05-10 19:49:40

标签: amazon-web-services amazon-s3

我需要执行一种命令,如:

  

aws s3api copy-object --copy-source bucket-1 --key * .txt --bucket   桶-1 /文件夹/

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

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用高级s3 api:

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

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

在对每个对象名执行cut操作之前,可以使用脚本迭代存储桶内容,使用Linux 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命令。 / p>

然后你就这样运行:

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

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

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

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