python3上传备份文件至OSS

admin 2022年7月24日04:20:07评论138 views字数 2379阅读7分55秒阅读模式

也许这个叫前言?

上周刚忙完某安全证书的考证,本来这周就应该开始学一些应急响应的东西,碰巧碰到某大佬,问我有一个功能想实现,能不能写一个脚本凑合一下

大概功能如下

python3上传备份文件至OSS

机器会定时在某个时间点,做一个机器的备份,文件目录的拓扑如上

然后在x号机器中,会有一个增量备份,所以需要在各个机器的备份文件夹中,找到该最新的增量备份,上传至阿里的OSS中

我一想,这不简单?于是就在13号的时候,上手写了个小脚本,有大佬觉得哪里不对的话欢迎指指点点

正文

我代码逻辑是

  1. 1os.walk()获取所有指定xxx后缀的备份文件->获取该文件路径->判断有没有查询过这个文件夹->利用listdir获取该文件当前路径下的所有文件->查找该目录下,最新创建的文件,并判断起后缀是否为xxx->上传oss

首先是,引用库

  1. 1import oss2
    2import sys
    3import os

oss2这个是阿里封装好的sdk,直接github下载源码,或者pip install oss2安装也行

然后是,写一个oss的验证

  1. 1...
    2auth = oss2.Auth('KeyId','KeySecret')
    3py_file_path=sys.path[0] #获取当前脚本所在的路径
    4bucket = oss2.Bucket(auth,'oss-cn-where.aliyuncs.com','bucket_name')

接着是,上传进度条和上传功能

  1. 1...
    2def percentage(consumed_bytes, total_bytes):
    3    if total_bytes:
    4        rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
    5        print('r{0}% '.format(rate), end='')
    6        sys.stdout.flush()
    7
    8def upload_file(uploadName,filename):
    9    bucket.put_object_from_file(str(uploadName),str(filename),progress_callback=percentage)

接着是查找当前目录下最新创建的文件,且后缀指定为xxx

  1. 1...
    2def find_new_file(dir):
    3    '''查找目录下最新的文件'''
    4    file_lists = os.listdir(dir)
    5    new_file_lists=[]
    6    for files_check1 in file_lists:
    7        if files_check1.endswith('xxx'):
    8            new_file_lists.append(files_check1)
    9        else:
    10            pass
    11    new_file_lists.sort(key=lambda fn: os.path.getmtime(dir + "\" + fn)
    12                    if not os.path.isdir(dir + "\" + fn) else 0)
    13    #print('最新的文件为: ' + file_lists[-1])
    14    file = os.path.join(dir, new_file_lists[-1])
    15    #print('完整路径:', file)
    16    return file,new_file_lists[-1]

接着就可以写本体了

先创建一个函数,用来检查这个路径是否已经查询过了

  1. 1...
    2file_check_root=[]

然后用os.walk()遍历所有目录,返回文件路径、文件夹名、文件名这三个变量

  1. 1...
    2for root,dirs,files in os.walk(py_file_path):

接着,for循环所有文件名,判断该文件是否以xxx结尾

  1. 1...
    2    for i in files:
    3        #print('files: '+i)
    4        #sys.stdout.flush()
    5        if i.endswith('xxx'):

如果判断为指定后缀,那么执行查找,和上传

  1. 1...
    2        if i.endswith('xxx'):
    3            if not root in file_check_root:
    4                new_file_root=find_new_file(root)
    5                #print(new_file_root[0])
    6                #sys.stdout.flush()
    7                file_check_root.append(root)
    8                filename=os.path.join(root,new_file_root[1])
    9                upload_file(new_file_root[1],filename)
    10            else:
    11                pass

补完全

  1. 1...
    2        else:
    3            continue

代码上传到github了,虽然很垃圾,但是至少也能用嘛

  1. 1https://github.com/Ernket/python-backup-alioss


原文始发于微信公众号(E条咸鱼):python3上传备份文件至OSS

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月24日04:20:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   python3上传备份文件至OSShttps://cn-sec.com/archives/1022637.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息