备份工具,svn的有效补充,不用扩建分支了

本文介绍了一个使用Python编写的备份与恢复工具,该工具能够帮助用户查找并列出备份文件,支持选择特定版本进行文件恢复,并提供了比较不同版本的功能。此外,还支持创建新的备份目录并记录相关操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 #!/usr/bin/env python

import shutil,os,time,sys,commands,string
def getbaks(name):
    res = commands.getoutput('find %s -name revert'%bakpath)
    destpath = os.path.abspath(sys.argv[2])
    lst=[]
    for revf in res.split():
        for ln in file(revf):
            cmdlines = ln.split()
            if len(cmdlines)==4 and cmdlines[0]=='cp' and cmdlines[3][1:-1] == destpath:
                lst.append([os.stat(cmdlines[2][1:-1])[8], (cmdlines[2][1:-1]), (cmdlines[3][1:-1])])
    lst.sort()
    lst.reverse()
    return lst

bakpath = '~/baks'
bakpath = os.path.expanduser(bakpath)
if not os.path.exists(bakpath) :
    os.mkdir(bakpath)
if len(sys.argv)==3:
    if(sys.argv[1] == '-r'):
        lst = getbaks(sys.argv[2])
        ind = 1
        for ln in lst:
            print '[%d]'%ind , time.strftime("%m-%d %H:%M:%S", time.localtime(ln[0]))
            ind += 1
        ind = string.atoi(raw_input('select:'))
        if ind>0 and len(lst)>=ind:
            print lst[ind-1][1], "==>", lst[ind-1][2]
            if os.path.isdir(lst[ind-1][2]):shutil.copytree(lst[ind-1][1], lst[ind-1][2])
            else: shutil.copy(lst[ind-1][1], lst[ind-1][2])
        exit(0)
    if(sys.argv[1] == '-d'):
        lst = getbaks(sys.argv[2])
        for ln in lst:
            os.system('meld %s %s'%(ln[1], ln[2]))
        exit(0)
 
tmdir = "%s/%s"%(bakpath, time.strftime("%m%d", time.gmtime()))
if os.path.exists(tmdir) :
    extdir = 1
    while os.path.exists("%s-%d"%(tmdir, extdir)) :
        extdir = extdir + 1
    tmdir = "%s-%d"%(tmdir, extdir)

os.mkdir(tmdir)

f = file(("%s/%s")%(tmdir, 'revert'),'w')
for it in sys.argv[1:]:
    des = "%s/%s"%(tmdir,os.path.basename(it))
    c = 1
    while os.path.exists(des):
        des = "%s/%d-%s"%(tmdir,c,os.path.basename(it))
        c = c+1   
    if(os.path.isdir(it)): shutil.copytree(it, des)
    else: shutil.copyfile(it, des)
    f.write('echo %s ==> %s/n'%(des, os.path.abspath(it)))
    f.write('cp -rf "%s" "%s"/n'%(des, os.path.abspath(it)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值