Python 自动备份SVN版本库并复制到远程主机脚本详解编程语言

#!/usr/bin/python  
# -*- coding: utf-8 -*-  
    
import os 
import re 
import tarfile 
import datetime 
import pexpect 
basedir='/data/bak/' #文件夹  
iplist=['']# IP地址  
def get_list(txt_file): 
    ret_list = [] 
    fin = open(txt_file,'r') 
    for line in fin: 
        if (re.match('^//s*$',line)):     #跳过是空白的行   
            continue 
        else: 
            line = line.lstrip() 
            line = line.rstrip()  #将回车(/n)去掉  
            ret_list.append(line) 
    #print('debug info of get_list :/n',ret_list)  
    return ret_list 
        
def copy_svn(filelist): #这个函数主要是完成dump  
    name= [] 
    name=os.path.split(filelist) 
    now = datetime.datetime.now() 
    filename = now.strftime(basedir+iplist[0] +name[-1]+ '_%Y%m%d_%H%M%S.dump') 
    os.system('svnadmin dump ' + filelist +' > '+filename ) 
      
    tarname =  now.strftime(basedir+iplist[0]+'_SVNDump_' +name[-1]+ '_%Y%m%d_%H%M%S.tar.gz') 
    #print tarname  
    tar = tarfile.open(tarname, 'w|gz') 
    tar.add(filename) 
    tar.close() 
        
        
    scp = pexpect.spawn('scp -r ' +  tarname  + ' [email protected]:/data/databak/FilesBack/') 
    scp.expect('.ssword:*') 
    scp.sendline('密码')   
    scp.expect(pexpect.EOF, timeout=None) 
        
      
    olddate = (now - datetime.timedelta(5)).strftime("%Y%m%d") 
    print olddate 
           
    for i in os.listdir(basedir): 
        file = re.search(r'/w*[_](/d{8})[_]/d{6}.(tar.gz|dump)', i) 
        #print i, file  
        if file and olddate>=file.group(1): 
            os.remove(basedir + file.group(0)) 
            print 'del:', file.group(0) 
            filelog=open("/data/bak/bak.log", "a") 
            filelog.write("============DATE:%s============= /n"% now.strftime("%Y%m%d")) 
            filelog.write("del file:%s /n" % (basedir+file.group(0) )) 
            filelog.write("============DATE:%s============= /n"% now.strftime("%Y%m%d")) 
        filelog.close() 
       
def copy_files(txt_file): 
    geted_list = get_list(txt_file) 
    for file in geted_list: 
        copy_svn(file) 
        
if __name__ == '__main__': 
    copy_files('/data/bak/filebak.txt') 
    print '='*20,'/ncopy_OKOKOK/n','='*20 
   
#!/usr/bin/python 
# -*- coding: utf-8 -*- 
   
import os 
import re 
import tarfile 
import datetime 
import pexpect 
basedir='/data/bak/' #文件夹 
iplist=['']# IP地址 
def get_list(txt_file): 
    ret_list = [] 
    fin = open(txt_file,'r') 
    for line in fin: 
        if (re.match('^//s*$',line)):     #跳过是空白的行 
            continue 
        else: 
            line = line.lstrip() 
            line = line.rstrip()  #将回车(/n)去掉 
            ret_list.append(line) 
    #print('debug info of get_list :/n',ret_list) 
    return ret_list 
      
def copy_svn(filelist): #这个函数主要是完成dump 
    name= [] 
    name=os.path.split(filelist) 
    now = datetime.datetime.now() 
    filename = now.strftime(basedir+iplist[0] +name[-1]+ '_%Y%m%d_%H%M%S.dump') 
    os.system('svnadmin dump ' + filelist +' > '+filename ) 
    
    tarname =  now.strftime(basedir+iplist[0]+'_SVNDump_' +name[-1]+ '_%Y%m%d_%H%M%S.tar.gz') 
    #print tarname 
    tar = tarfile.open(tarname, 'w|gz') 
    tar.add(filename) 
    tar.close() 
      
      
    scp = pexpect.spawn('scp -r ' +  tarname  + ' [email protected]:/data/databak/FilesBack/') 
    scp.expect('.ssword:*') 
    scp.sendline('密码') 
    scp.expect(pexpect.EOF, timeout=None) 
      
    
    olddate = (now - datetime.timedelta(5)).strftime("%Y%m%d") 
    print olddate 
         
    for i in os.listdir(basedir): 
        file = re.search(r'/w*[_](/d{8})[_]/d{6}.(tar.gz|dump)', i) 
        #print i, file 
        if file and olddate>=file.group(1): 
            os.remove(basedir + file.group(0)) 
            print 'del:', file.group(0) 
           filelog=open("/data/bak/bak.log", "a") 
            filelog.write("============DATE:%s============= /n"% now.strftime("%Y%m%d")) 
            filelog.write("del file:%s /n" % (basedir+file.group(0) )) 
            filelog.write("============DATE:%s============= /n"% now.strftime("%Y%m%d")) 
     filelog.close() 
     
def copy_files(txt_file): 
    geted_list = get_list(txt_file) 
    for file in geted_list: 
        copy_svn(file) 
      
if __name__ == '__main__': 
    copy_files('/data/bak/filebak.txt') 
    print '='*20,'/ncopy_OKOKOK/n','='*20

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/8327.html

(0)
上一篇 2021年7月18日 19:32
下一篇 2021年7月18日 19:32

相关推荐

发表回复

登录后才能评论