如何在一个亚马逊S3桶与boto有效地将所有文件从一个目录复制到另一个目录?

我需要在亚马逊S3存储桶中将所有键从’/ old / dir /’复制到’/ new / dir /’.
我想出了这个脚本(快速破解):

import boto

s3 = boto.connect_s3()
thebucket = s3.get_bucket("bucketname")
keys = thebucket.list('/old/dir')
for k in keys:
    newkeyname = '/new/dir' + k.name.partition('/old/dir')[2]
    print 'new key name:', newkeyname
    thebucket.copy_key(newkeyname, k.bucket.name, k.name)

现在它正在工作,但比我在图形管理控制台中手动操作要慢得多,只需用鼠标复制/过去.非常令人沮丧,有很多钥匙要复制……

你知道更快的方法吗?谢谢.

编辑:也许我可以使用并发复制过程来完成此操作.我不太熟悉boto复制密钥方法以及我可以向亚马逊发送多少并发进程.

Edit2:我正在学习Python多处理.让我们看看我是否可以同时发送50个复制操作……

编辑3:我尝试使用Python多处理模块进行30个并发复制.复制速度比控制台内快得多,并且不易出错.大文件存在新问题(> 5Gb):boto引发异常.我需要在发布更新的脚本之前调试它.

最佳答案
关于5GB以上文件的问题:S3不支持使用PUT方法上传超过5GB的文件,这是boto尝试做的事情(see boto source,Amazon S3 documentation).

不幸的是,除了下载和重新上传多部分上传之外,我不确定如何解决这个问题.我不认为boto支持多部分复制操作(如果这样的话甚至存在)

转载注明原文:如何在一个亚马逊S3桶与boto有效地将所有文件从一个目录复制到另一个目录? - 代码日志