定时备份.git文件夹
crontab
8 20 * * * /mnt/DATA/proj/py/backuper/backuper.py
backuper.py
#!/usr/bin/python # -*- coding: utf-8 -*- ''' 作用: 备份.git文件夹 usage: ./backuper.py 推荐加入crontab CONFIG_FILE示例: BACKUPDIR = '/mnt/DATA/proj/BACKUP/' TASK_FILE可用`ls |sed "s:^:`pwd`/:"`产生,每行一个项目文件夹: /mnt/DATA/proj/eclipse/ani /mnt/DATA/proj/eclipse/animalchess ''' import sys import os import time CONFIG_FILE = '/mnt/DATA/proj/py/backuper/config.cfg' TASK_FILE = '/mnt/DATA/proj/py/backuper/projs.txt' BACKUPDIR = '' BACKUPNAME = '' TEMPNAME = '' def getdir(o_dir): d_dir = os.path.join(o_dir, '.git') print d_dir if os.path.exists(d_dir): return d_dir def getnames(o_dir): global BACKUPNAME, TEMPNAME name = os.path.split(o_dir)[1] BACKUPNAME = os.path.join(BACKUPDIR, name + '.git' + '.tar.gz') TEMPNAME = BACKUPNAME + str(time.time()) def doConfig(): if os.path.exists(CONFIG_FILE): dic = {} exec(open(CONFIG_FILE).read()) in dic global BACKUPDIR BACKUPDIR = dic['BACKUPDIR'] #if len(BACKUPDIR) == 0: # print 'BAD ' + CONFIG_FILE def backupdir(d): para = os.path.split(d) cmd = 'tar -czf %s -C %s %s' % (TEMPNAME, para[0], para[1]) print cmd if os.system(cmd) == 0: if os.path.exists(BACKUPNAME): os.remove(BACKUPNAME) os.rename(TEMPNAME, BACKUPNAME) if os.path.exists(TEMPNAME): os.remove(TEMPNAME) def doLine(taskdir): if os.path.exists(taskdir): getnames(taskdir) d = getdir(taskdir) if d: backupdir(d) def work(): if os.path.exists(TASK_FILE): for line in open(TASK_FILE).xreadlines(): line = line[:len(line)-len(os.linesep)] doLine(line) if __name__ == '__main__': doConfig() print BACKUPDIR work()
config.cfg
BACKUPDIR = '/mnt/DATA/proj/BACKUP/'
projs.txt
/mnt/DATA/proj/eclipse/ImageViewer /mnt/DATA/proj/eclipse/luandroid /mnt/DATA/proj/eclipse/luandroid_basic.7z /mnt/DATA/proj/eclipse/LuaRunner