目标:
1.实现将目标文件拷贝备份到其他目录并重新命名为日期+.back格式
2.清空源文件的内容
2.并对n天前的备份.back文件进行打包为tgz包
3.删除备份的.back文件,
4.推送tgz压缩文件到七牛存储。
5.删除本地tgz包
测试
推送文件至七牛
备份脚本
[root@iZm5e9x1jjza2nspm04niyZ tmp]# cat back_file.py
[root@iZm5e9x1jjza2nspm04niyZ scripts]# cat back_file.py
# -*- coding: utf-8 -*-
import shutil
from datetime import datetime as dt
import datetime
import sys
import argparse
import os
class f_backup:
def __init__(self,sdir,bdir,sfile,rday,bday):
self.sdir = sdir
self.bdir = bdir
self.sfile = sfile
self.bday = bday
self.rday = rday
@staticmethod
def mkdirpdir(sdir,bdir):
if not os.path.isdir(bdir):
os.makedirs(bdir)
if not os.path.isdir(sdir):
print('备份文件目录不存在请重新指定')
sys.exit(1)
def cpbackfile(self):
for i in self.sfile:
checkdir=self.mkdirpdir(self.sdir,self.bdir)
self.localfile = self.sdir + i
self.backfile = self.bdir + i +'.'+self.rday+'.back'
shutil.copyfile(self.localfile,self.backfile)
if os.path.isfile(self.backfile):
print('copyfile-成功')
#清空文件
clearfile = open(self.localfile,'w').close()
print('目标文件已清空')
else:
print('copyfile-失败')
sys.exit(1)
def tarfile(self):
os.chdir(self.bdir)
for i in [ h for h in os.listdir('./') if h.endswith('.back')]:
aday=i.split('.')[2]#获取文件日期
#如果是三天前的文件那么就打包.
if dt.strptime(aday,"%Y-%m-%d") < dt.strptime(self.bday,"%Y-%m-%d"):
tarf = i + '.tgz'
cmd = 'tar -czvf %s %s'%(tarf,i)
if os.system(cmd) == 0:
print('%s打包成功'%(i))
os.remove(i)
else:
print('%s打包失败'%(i))
sys.exit(1)
def main():
#python file_tar_back.py -SF ./ -BD ./test/ -BF 1.txt 2.txt 3.txt -TD 3
print('|-----------------------------------------------------------------------------------------------')
print('|Usage:python back_file.py -SF ./aaa/ -BD ./bbb/ -BF wyl-1.txt wyl-2.txt -TD 10')
parser = argparse.ArgumentParser()
parser.add_argument('-SF','--sdir',type=str,default='NULL',help='目标目录')
parser.add_argument('-BD','--bdir',type=str,default='NULL',help='备份目录')
parser.add_argument('-BF','--plugins',type=str,nargs='+',help='目标文件',default=['access.log'])
parser.add_argument('-TD','--ntday',type=str,help='对ntday天前的备份文件进行打包',default='3')
args=parser.parse_args()
print('|Target_dir:[%s],backupdir:[%s],backupfile:%s,days[%s]'%(args.sdir,args.bdir,args.plugins,args.ntday))
print('|-----------------------------------------------------------------------------------------------')
##########################################################################
# 获取想要的日期的时间,即前1天和3天时间
today = datetime.datetime.now()
# 计算偏移量,前1天和三天前
offset = datetime.timedelta(days=-1)
offsets = datetime.timedelta(days=-int(args.ntday))
# 获取想要的日期的时间,即前1天和3天时间
re_date = (today + offset)
re_datas = (today + offsets)
#当前时间前1天3天
tday=today.strftime('%Y-%m-%d')#当天
rday=re_date.strftime('%Y-%m-%d')#1天前
bday = re_datas.strftime('%Y-%m-%d')#三天前
#######################################################################
A = f_backup(args.sdir,args.bdir,args.plugins,rday,bday)
A.cpbackfile()
A.tarfile()
if __name__ == "__main__":
main()
推送脚本 push_file.py
[root@iZm5e9x1jjza2nspm04niyZ scripts]# cat push_file.py # -*- coding: utf-8 -*- # flake8: noqa #使用前先: #pip uninstall urllib3 #pip uninstall chardet #pip install requests #pip install qiniu #pip install requests from qiniu import Auth, put_file, etag import qiniu.config import os import argparse class update_file: def __init__(self,bucket_name,localfile,key): #需要填写你的 Access Key 和 Secret Key self.access_key = 'xxxxxxxx' self.secret_key = 'yyyyyyyy' #要上传的空间 self.bucket_name = bucket_name #上传后保存的文件名key self.key = key #要上传文件的本地路径localfile self.localfile = localfile def upfile(self):#构建鉴权对象 q = Auth(self.access_key, self.secret_key) #生成上传 Token,可以指定过期时间等,policy指定上传策略 token = q.upload_token(self.bucket_name, self.key,7200) ret, info = put_file(token, self.key, self.localfile) #print('ret',ret) #print('info',info) assert ret['key'] == self.key assert ret['hash'] == etag(self.localfile) info = str(str(info).split(',')[2]).split(':')[1] return info def main(): #python push_file.py -B mint-jizhiyunwei -L 网安.rar -K test/网安.rar print('|--------------------------------------------------------------------------------------------') print('|usage1:推送单文件:python push_file.py -B mint-jizhiyunwei -L 网安.rar -K test/网安.rar') print('|usage2:推送目录:python push_file.py -B mint-jizhiyunwei -L /server/scripts/ -K test/ -E .txt') parser = argparse.ArgumentParser() parser.add_argument('-B','--bucket_name',type=str,default='NULL',help='存储桶名称') parser.add_argument('-L','--localfile',type=str,default='NULL',help='本地文件路径名称') parser.add_argument('-K','--key',type=str,default='NULL',help='上传后保存的文件路径名称') parser.add_argument('-E','--endswith',type=str,default='NULL',help='以什么结尾') args = parser.parse_args() if 'NULL' in (args.bucket_name,args.localfile,args.key,): print('缺少必要参数请查看帮助:python file.py --help') else: if os.path.isdir(args.localfile): print('|您选用的存储桶:%s,准备上传的文件路径为:%s,上传后的文件路径为:%s,上传文件的后缀为:%s'%(args.bucket_name,args.localfile,args.key,args.endswith)) print('|--------------------------------------------------------------------------------------------') if 'NULL' != args.endswith: listlocalfile = [ i for i in os.listdir(args.localfile) if i.endswith(args.endswith)] listkey = [ args.key + i for i in listlocalfile ] dictpush = dict(zip(listlocalfile,listkey)) for lfile in dictpush: LBG = update_file(args.bucket_name,args.localfile+lfile,dictpush[lfile]) LDG = LBG.upfile() print(LDG) os.remove(args.localfile+lfile) else: print('当上传资源为路径时,-E(--endswith)不能为空!') return "" elif os.path.isfile(args.localfile): print('您选用的存储桶:%s,准备上传的文件:%s,上传后的文件名:%s'%(args.bucket_name,args.localfile,args.key)) try: BG = update_file(args.bucket_name,args.localfile,args.key) DG = BG.upfile() os.remove() except BaseException as f: print('上传失败\n%s'%(f)) return "" else: print('上传文件不存在') return "" if __name__ == "__main__": main()