|
发表于 2009-12-30 19:19:22
|
显示全部楼层
备份配置,我的习惯是这样的
在 $HOME 建一个目录,然后把配置分类放在里面
然后把包这个目录
ls -lh > link.txt 做一个脚本来还原它
备份 /etc 的就做成脚本,把要备份的文件cp 到指定目录下
以下是还原link的脚本- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- import sys,os,string
- from stat import *
- #===============================================
- ##### ls -Al|grep MultiConfigDir|grep ^l > link_files.txt
- #===============================================
- def MainFunc(IsTest):
- InputFile = "link_files.txt"
- TxtFileHandle = open(InputFile, 'r')
- print 'Start Read File...\n'
- try:
- #--------------------------------------------------------
- while True:
- ReadStr = TxtFileHandle.readline()
- if not ReadStr:
- print '\nEnd File....\n'
- break
- ListStr = ReadStr.split()
- #print ListStr
- if (len(ListStr) == 0):
- continue
- print ListStr[0]
- if ListStr[0].startswith('#'):
- #print "startswith('#')"
- continue
- if ListStr[0].startswith("l"):
- if (len(ListStr) == 10):
- #print "7 = %s 9 = %s" % (ListStr[7], ListStr[9])
- RetVal = ProcOneLine(ListStr[9], ListStr[7], IsTest)
- if (RetVal == False):
- break
- #--------------------------------------------------------
- #except:
- finally:
- TxtFileHandle.close()
- #=-----------------------------------------------------------------
- def ChkAndMkDir(DirNameStr):
- if (not os.path.exists(DirNameStr)):
- os.system("mkdir -pv %s" % DirNameStr)
- def ChkIsExists(FileStr):
- if (os.path.exists(FileStr)):
- return True
- else:
- return False
- def ChkIsDir(DirStr):
- StatMode = os.stat(DirStr)[ST_MODE]
- if (S_ISDIR(StatMode)):
- return True
- else:
- return False
- #if (os.path.isfile(DirStr)):
- # return False
- #else:
- # return True
- def ChkIsLink(LinkStr):
- #StatMode = os.stat(LinkStr)[ST_MODE]
- if (os.path.islink(LinkStr)):
- #if (S_ISLNK(StatMode)):
- return True
- else:
- return False
- #=-----------------------------------------------------------------
- def ProcOneLine(SrcStr, DestStr, IsTest):
- if (not ChkIsExists(SrcStr)):
- #print "Target Not Found!"
- return True
-
- BackupConfDir = "BackupConfDir/"
- #--------Clean Start----
- if (ChkIsExists(DestStr)):
- if (ChkIsLink(DestStr)):
-
- ReadLink = os.readlink(DestStr)
- if (ReadLink == SrcStr):
- print "link = %s Yes Euery" % ReadLink
- return True
- else:
- print "link = %s No Eqery" % ReadLink
- #return True
- if (True == IsTest):
- print "os.unlink(%s)" % DestStr
- else:
- print "os.unlink(%s)" % DestStr
- #if (os.unlink(DestStr)):
- if (os.system("unlink %s" % DestStr) == 0):
- print "unlink OK"
- else:
- print "unlink Fail"
- else:
- #-------Add user input
- if (ChkIsDir(DestStr)):
- result = ask_YNQ("Delete ==== %s === Dir ?" % (DestStr))
- if (result == "quit"):
- return False
- if (result == "yes"):
- if (True == IsTest):
- print "os.rmdir(%s) " % DestStr
- else:
- ChkAndMkDir(BackupConfDir)
- os.system("cp %s %s -rf" % (DestStr, BackupConfDir))
- print "os.rmdir(%s) " % DestStr
- #if (os.rmdir(DestStr)):
- if (os.system("rm %s -rf" % DestStr) == 0):
- print "rmdir() OK"
- else:
- print "rmdir() Faile"
- else:
- return True
- else:
- result = ask_YNQ("Delete === %s === File ?" % (DestStr))
- if (result == "quit"):
- return False
- if (result == "yes"):
- if (True == IsTest):
- print "os.remove(%s)" % DestStr
- else:
- ChkAndMkDir(BackupConfDir)
- os.system("cp %s %s -f" % (DestStr, BackupConfDir ))
- print "os.remove(%s)" % DestStr
- #if (os.remove(DestStr)):
- if (os.system("rm -f %s" % DestStr) == 0):
- print "os.remove OK"
- else:
- print "os.remove False"
- else:
- return True
- else:
- print "%s is Not Exists" % DestStr
- #----Clean Over-----
- if (True == IsTest):
- print "os.symlink(%s, %s) " % (SrcStr, DestStr)
- else:
- print "os.symlink(%s, %s) " % (SrcStr, DestStr)
- #os.symlink(SrcStr, DestStr)
- if (os.system("ln -sv %s %s" % (SrcStr, DestStr)) == 0):
- print "ln -sv %s %s OK" % (SrcStr, DestStr)
- else:
- print "ln -sv %s %s faile" % (SrcStr, DestStr)
- return True
- #=-----------------------------------------------------------------
- def ask_ok(prompt):
- while True:
- ok = raw_input(prompt)
- if ok in ('y', 'ye', 'yes'):
- return True
- elif ok in ('n', 'no', 'nop', 'nope'):
- return False
- else:
- print 'yes or no,please'
-
- def ask_YNQ(prompt):
- while True:
- ok = raw_input(prompt)
- if ok in ('y', 'ye', 'yes'):
- return "yes"
- elif ok in ('n', 'no', 'nop', 'nope'):
- return "no"
- elif ok in ('q', 'quit'):
- return "quit"
- else:
- print 'yes or no or quit,please'
- #while 1:
- # flag = ask_ok('are you really want to quit?')
- # if flag == True:
- # break
- #print 'out'
- #=-----------------------------------------------------------------
- if __name__ == "__main__":
- IsTest = True
- if (len(sys.argv) > 1):
- if (sys.argv[1] in ('true', 'True')):
- print "IsTest is False"
- IsTest = False
- else:
- print "IsTest is True"
- print "MainFunc Start"
- MainFunc(IsTest)
- print "MainFunc Over"
- # SrcStr = "12341325"
- # if (ask_ok("Delete %s Dir ?" % (SrcStr, ))):
- # print "delete ..."
- # else:
- # print "Esc"
- #=-----------------------------------------------------------------
- # os.path.exists(path)
- # if os.path.isfile("c:\windows"):
- # print "file"
- # else:
- # print "directory"
- # os.symlink(src, des)
- # unlink( path)
- # mkdir( path[, mode])
复制代码
之前还写了个自动压缩这个目录上传到邮箱的脚本 |
|