Python 自动备份SVN版本库并复制到远程主机脚本

Python 自动备份SVN版本库并复制到远程主机脚本[python高级教程]

#!/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()  #将回车(
)去掉  
            ret_list.append(line) 
    #print("debug info of get_list :
",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  + " root@IP:/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============= 
"% now.strftime("%Y%m%d")) 
            filelog.write("del file:%s 
" % (basedir+file.group(0) )) 
            filelog.write("============DATE:%s============= 
"% 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,"
copy_OKOKOK
","="*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()  #将回车(
)去掉
            ret_list.append(line)
    #print("debug info of get_list :
",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  + " root@IP:/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============= 
"% now.strftime("%Y%m%d"))
            filelog.write("del file:%s 
" % (basedir+file.group(0) ))
            filelog.write("============DATE:%s============= 
"% 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,"
copy_OKOKOK
","="*20


来源:PY学习网:原文地址:https://www.py.cn/article.html