python3上传备份文件至OSS

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

也许这个叫前言?

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

大概功能如下

python3上传备份文件至OSS

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

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

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

正文

我代码逻辑是

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

首先是,引用库

1import oss2
2import sys
3import os

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

然后是,写一个oss的验证

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

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

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...
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...
2file_check_root=[]

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

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

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

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

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

 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...
2        else:
3            continue

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

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


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

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

发表评论

匿名网友 填写信息