python svn库_Python 自动备份SVN版本库并复制到远程主机脚本详解

这是一个使用Python编写的脚本,用于自动备份SVN版本库,并将备份文件通过SCP复制到远程主机。脚本首先读取包含SVN库路径的文件,然后使用svnadmin创建dump文件,再压缩为tar.gz格式。同时,脚本还会删除5天前的旧备份,以保持文件夹整洁。最后,所有操作记录写入日志文件。
摘要由CSDN通过智能技术生成

#!/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值