Jan*_*ard 75 copy amazon-s3 amazon-web-services
我对s3cmd很满意,但有一个问题:如何将所有文件从一个S3存储桶复制到另一个?它甚至可能吗?
编辑:我发现了一种使用Python与boto在存储桶之间复制文件的方法:
from boto.s3.connection import S3Connection
def copyBucket(srcBucketName, dstBucketName, maxKeys = 100):
conn = S3Connection(awsAccessKey, awsSecretKey)
srcBucket = conn.get_bucket(srcBucketName);
dstBucket = conn.get_bucket(dstBucketName);
resultMarker = ''
while True:
keys = srcBucket.get_all_keys(max_keys = maxKeys, marker = resultMarker)
for k in keys:
print 'Copying ' + k.key + ' from ' + srcBucketName + ' to ' + dstBucketName
t0 = time.clock()
dstBucket.copy_key(k.key, srcBucketName, k.key)
print time.clock() - t0, ' seconds'
if len(keys) < maxKeys:
print 'Done'
break
resultMarker = keys[maxKeys - 1].key
Run Code Online (Sandbox Code Playgroud)
同步几乎与复制一样简单.ETag,大小和最后修改的字段可用于键.
也许这对其他人也有帮助.
ami*_*ena 90
s3cmd sync s3://from/this/bucket/ s3://to/this/bucket/
有关可用选项,请使用:
$s3cmd --help
pyt*_*981 43
AWS CLI似乎完美地完成了这项工作,并且具有成为官方支持工具的好处.
aws s3 sync s3://mybucket s3://backup-mybucket
Run Code Online (Sandbox Code Playgroud)
http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
mda*_*man 29
在我写这篇文章时,最热门投票的答案是这样的:
s3cmd sync s3://from/this/bucket s3://to/this/bucket
Run Code Online (Sandbox Code Playgroud)
这是一个有用的答案.但有时同步不是你需要的(它删除文件等).我花了很长时间才弄清楚这种非脚本替代方案,只需在桶之间复制多个文件.(好吧,在下面显示的情况下,它不在存储桶之间.它位于非真实文件夹之间,但它在存储桶之间同样有效.)
# Slightly verbose, slightly unintuitive, very useful:
s3cmd cp --recursive --exclude=* --include=file_prefix* s3://semarchy-inc/source1/ s3://semarchy-inc/target/
Run Code Online (Sandbox Code Playgroud)
上述命令的说明:
s3://sourceBucket/ s3://targetBucket/
s3cmd cp s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]
小智 8
我需要复制一个非常大的存储桶,因此我将问题中的代码调整为多线程版本并将其放在GitHub上.
https://github.com/paultuckey/s3-bucket-to-bucket-copy-py
小智 8
您也可以使用Web界面执行此操作:
而已.
归档时间: |
|
查看次数: |
61141 次 |
最近记录: |