也许这个叫前言?
上周刚忙完某安全证书的考证,本来这周就应该开始学一些应急响应的东西,碰巧碰到某大佬,问我有一个功能想实现,能不能写一个脚本凑合一下
大概功能如下
机器会定时在某个时间点,做一个机器的备份,文件目录的拓扑如上
然后在x号机器中,会有一个增量备份,所以需要在各个机器的备份文件夹中,找到该最新的增量备份,上传至阿里的OSS中
我一想,这不简单?于是就在13号的时候,上手写了个小脚本,有大佬觉得哪里不对的话欢迎指指点点
正文
我代码逻辑是
1用os.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
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论