我需要执行一种命令,如:
aws s3api copy-object --copy-source bucket-1 --key * .txt --bucket 桶-1 /文件夹/
我在存储桶的根目录中有很多txt文件,我想将它们移动到同一个存储桶中的文件夹中。
非常感谢。
答案 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
结尾。这将确保您只移动文本文件。