【发布时间】:2018-05-10 19:49:40
【问题描述】:
我需要执行类似的命令:
aws s3api 复制对象 --copy-source bucket-1 --key *.txt --bucket bucket-1/文件夹/
我在存储桶的根目录中有许多 txt 文件,我想将它们移动到同一个存储桶内的文件夹中。
非常感谢。
【问题讨论】:
标签: amazon-web-services amazon-s3
我需要执行类似的命令:
aws s3api 复制对象 --copy-source bucket-1 --key *.txt --bucket bucket-1/文件夹/
我在存储桶的根目录中有许多 txt 文件,我想将它们移动到同一个存储桶内的文件夹中。
非常感谢。
【问题讨论】:
标签: amazon-web-services amazon-s3
您可以使用高级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 的东西吗?
*)。