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

时间:2012-02-09 21:48:13

标签: python performance amazon-s3 copy-paste boto

我需要将所有键从'/ 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引发异常。我需要在发布更新的脚本之前调试它。

1 个答案:

答案 0 :(得分:1)

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

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