我在一个存储桶中有200k个文件,我需要移动到同一个存储桶中的子文件夹中,最好的方法是什么?
答案 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