在Python中使用boto进行s3cmd同步

4 投票
1 回答
1419 浏览
提问于 2025-04-18 01:26

我想把一些备份脚本从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是否不同即可。

撰写回答