目標:
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()