在Python中使用boto进行s3cmd同步
我想把一些备份脚本从bash转到python,这样可以更好地处理错误。
我一直在用s3cmd这个工具把目录备份到s3上。我希望能在python中找到一个同样简单的方法来直接实现这个功能(可能会用到boto库),但到目前为止,似乎用subprocess.call
来继续使用s3cmd是最简单的办法。
有没有人有更好的建议呢?
1 个回答
2
单靠boto库,操作起来并不是特别简单。有一些其他的工具包可以实现这个功能,它们似乎都用同样的方法:比较本地文件的MD5哈希值和S3键的etag。
下面是计算本地文件MD5哈希值的方法(注意:这个方法会把文件的全部内容加载到内存中):
print hashlib.md5(open(filename, 'rb').read()).hexdigest()
7bee81f4be312203c0e29d4dfe65fb0b
而对于S3键(注意:你不能在本地创建一个boto.s3.key.Key
;而是要从存储桶中获取):
key = bucket.get_key(path)
print key.etag
"7bee81f4be312203c0e29d4dfe65fb0b"
需要注意的是,etag的值周围有引号。
要进行同步,只需在执行获取或上传操作之前,检查MD5和etag是否不同即可。