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

mar*_*ank 18 amazon-s3

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

Mat*_*aly 27

我最近遇到了同样的问题.我使用命令行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 
Run Code Online (Sandbox Code Playgroud)

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

  • 出于安全原因,我编辑了这个答案。对于不了解 AWS 或其安全模型并且倾向于快速复制/粘贴并尝试代码而不理解代码的人(很多很多人)来说,将“--acl public-read”放在主代码主体中是有问题的。它也没有回答未提及公共 ACL 的问题,因此我将该选项代码放在注释的末尾。 (4认同)
  • IIRC,您将为 mv 将在后台制作的每个命令副本和删除付费,因为 AWS 没有“移动”命令,aws 脚本将使用副本伪造,然后递归删除每个文件 (2认同)
  • 复制/删除没有问题,因为删除请求是免费的。每1000个请求(标准)的PUT,COPY,POST或LIST费用为$ 0.005。因此,例如,移动700,000个对象为$ 3.50(与仅复制它们相同)。 (2认同)

小智 12

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

像这样运行一个代码段:

aws s3 mv s3://bucket-name/ s3://bucket-name/subfolder --recursive --exclude "*" --include "*.txt"
Run Code Online (Sandbox Code Playgroud)

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

  • 你忘记了`--recursive`标志 (5认同)
  • 警告:这可能会导致在您的存储桶中使用由“深度嵌套”子文件夹组成的键创建对象,例如 s3://bucket-name/subfolder/subfolder/subfolder/blah.txt。通过添加额外的排除来规避此问题: $ aws s3 mv s3://bucket-name/ s3://bucket-name/subfolder --recursive --exclude "*" --include "*.txt" --exclude “子文件夹/*” (3认同)

chi*_*lts 2

没有“重命名”操作,但如果有的话那就太好了。

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

注意:为了简单起见,我假设您没有在存储桶上启用版本控制。

  • 听起来很痛苦!API 似乎是为了赚钱而优化的,而不是为了方便。 (3认同)