【发布时间】:2020-12-16 03:56:43
【问题描述】:
我在一个存储桶中有 200k 个文件,我需要将它们移动到同一个存储桶中的子文件夹中,最好的方法是什么?
【问题讨论】:
-
我的答案是否低于您的要求?
标签: amazon-s3
我在一个存储桶中有 200k 个文件,我需要将它们移动到同一个存储桶中的子文件夹中,最好的方法是什么?
【问题讨论】:
标签: amazon-s3
我最近遇到了同样的问题。我使用命令行 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 public-read 放在主代码体中对于不了解 AWS 或其安全模型并且倾向于快速复制/粘贴和尝试代码而不理解它的人(很多很多人)来说是有问题的。它也没有回答没有提到公共 ACL 的问题,所以我将该选项代码放在评论的末尾。
最近可以用一个命令来做到这一点。也比对每个文件的单独请求快得多。
像这样运行一个 sn-p:
aws s3 mv s3://bucket-name/ s3://bucket-name/subfolder --recursive --exclude "*" --include "*.txt"
使用--include 标志有选择地选择你想要的文件
【讨论】:
--recursive 标志
没有“重命名”操作,但如果有就好了。
相反,您需要遍历要重命名的每个项目,复制到新对象,然后删除旧对象。
注意:为了简单起见,我假设您没有在存储桶上启用版本控制。
【讨论】:
我遇到了同样的问题,最终我使用了 aws s3 mv 和一个 bash for 循环。
我做了aws ls bucket_name 来获取存储桶中的所有文件。然后我决定要移动哪些文件并将它们添加到file_names.txt。
然后我运行以下 sn-p 来移动所有文件:
for f in $(cat file_names.txt)
do
aws s3 mv s3://bucket-name/$f s3://bucket-name/subfolder/$f
done
【讨论】:
如果您的文件在文件夹中,您可以使用 s3cmd 工具
s3cmd cp --recursive s3://bucket/folder/ s3://bucket/sub_folder/
Ps:我假设你已经安装并配置了 s3cmd
【讨论】:
以下脚本对我来说非常完美,没有任何问题
for i in `cat s3folders`
do
aws s3 mv s3://Bucket_Name/"$i"/ s3://Another_Bucket_Name/ --recursive
done
一旦文件移动到目标,它也会从源中删除空文件夹。
【讨论】: