定时备份.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