在同一个存储桶中移动多个文件

时间:2011-08-12 16:05:56

标签: amazon-s3

我在一个存储桶中有200k个文件,我需要移动到同一个存储桶中的子文件夹中,最好的方法是什么?

6 个答案:

答案 0 :(得分:23)

我最近遇到了同样的问题。我使用命令行API解决了它。

http://docs.aws.amazon.com/cli/latest/index.html http://docs.aws.amazon.com/cli/latest/reference/s3/mv.html

aws s3 mv s3://BUCKETNAME/myfolder/photos/ s3://BUCKETNAME/myotherfolder/photos/ --recursive --acl public-read 

我需要公开查看对象,所以我添加了acl选项。

答案 1 :(得分:6)

最近能用一个命令做到这一点。比每个文件的单个请求快得多。

运行这样的代码段:

aws s3 mv s3://bucket-name/ s3://bucket-name/subfolder --exclude "*" --include "*.txt"

使用--include标志有选择地选择所需的文件

答案 2 :(得分:1)

没有'重命名'操作虽然如果有的话会很好。

相反,您需要遍历要重命名的每个项目,执行新对象的复制,然后删除旧对象。

注意:出于简单的目的,我假设您没有在您的存储桶上启用版本控制。

答案 3 :(得分:0)

我遇到了同样的问题,最后我使用aws s3 mv和bash for循环。

我做了aws ls bucket_name来获取存储桶中的所有文件。然后我决定要移动哪些文件并将它们添加到file_names.txt

然后我运行以下代码片段来移动所有文件:

for f in $(cat file_names.txt)
do
    aws s3 mv s3://bucket-name/$f s3://bucket-name/subfolder/$f
done

答案 4 :(得分:0)

以下脚本对我来说完美无缺

for i in `cat s3folders`
do 
     aws s3 mv s3://Bucket_Name/"$i"/ s3://Another_Bucket_Name/ --recursive
done

文件移至目标后,它还会从源中删除空文件夹。

答案 5 :(得分:0)

如果文件位于文件夹中,则可以使用 s3cmd 工具

s3cmd cp --recursive s3://bucket/folder/ s3://bucket/sub_folder/

Ps:我假设您已经安装并配置了s3cmd