text 用于将S3存储桶同步到本地文件系统的Python脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了text 用于将S3存储桶同步到本地文件系统的Python脚本相关的知识,希望对你有一定的参考价值。

# -*- coding: utf-8 -*-
import os
import StringIO
import hashlib

try:
    from boto.s3.connection import S3Connection
    from boto.s3.key import Key
except ImportError:
    raise ImproperlyConfigured, "Could not load Boto's S3 bindings."


ACCESS_KEY = ""
SECRET_KEY = ""
BUCKET = ""
FILE_ROOT = ""


def syncS3():
    connection = S3Connection(ACCESS_KEY, SECRET_KEY)
    bucket = connection.get_bucket(BUCKET)
    s3_keys = bucket.list()
    save_keys(s3_keys)

def save_keys(keys):
    for key in keys:
        key_string = str(key.key)
        parent_folder = "\\".join(key_string.split("/")[0:2])
        parent_folder = os.path.join(FILE_ROOT, parent_folder)
        key_path = os.path.join(parent_folder, key_string.split("/")[-1])
        if not os.path.exists(parent_folder):
            os.makedirs(parent_folder)
        if not os.path.exists(key_path):
            save_to = open(key_path, "wb")
            key.get_file(save_to)
            save_to.close()
            print "saved: %s" % key_path
        else:
            # etag holds the md5 for the key, wrapped in quotes
            s3_md5 = key.etag.strip('"')
            local_md5 = hashlib.md5(open(key_path, "rb").read()).hexdigest()
            if s3_md5 == local_md5:
                print "already exists, file the same: %s" % key_path
            else:
                save_to = open(key_path, "wb")
                key.get_file(save_to)
                save_to.close()
                print "file changed, overwrote: %s" % key_path
        

if __name__ == "__main__":
    syncS3()

以上是关于text 用于将S3存储桶同步到本地文件系统的Python脚本的主要内容,如果未能解决你的问题,请参考以下文章

text [与S3存储桶同步文件夹] #aws

如何将 AWS S3 存储桶与远程非 AWS 服务器上的文件同步?

将 ownCloud/Nextcloud 与 S3 存储桶同步问题一起使用

存储桶之间的 AWS S3 同步覆盖较新的目标文件

将 AWS S3 存储桶同步到 EC2 服务器

使用 NodeJS 和 AWS S3 将损坏/截断的 mp4 上传到 S3 存储桶