我需要将所有键从'/ old / dir /'复制到亚马逊S3存储桶中的'/ 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引发异常。我需要在发布更新的脚本之前调试它。
答案 0 :(得分:1)
关于5GB以上文件的问题:S3不支持使用PUT方法上传超过5GB的文件,这是boto尝试做的事情(see boto source,Amazon S3 documentation)。
不幸的是,除了下载和重新上传多部分内容之外,我不确定如何解决这个问题。我不认为boto支持多部分复制操作(如果这样的话甚至存在)