设为首页 收藏本站
查看: 595|回复: 0

[经验分享] python 备份脚本

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-20 09:50:31 | 显示全部楼层 |阅读模式
原来是ruby写的, 考虑不太全, 现在重写了一下。 按时间过滤相关东西

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/env python

import os
import re
import time
import tarfile
import string

bak_ser = "bacula@192.168.1.4"
tar_dir = "/tmp/auto_tar_bak"
ext_user = "/eda/bin/auto_bak.conf"
config = {"deep":8, "exclude":"Code|INCA.libs", "filetype":"bmp|png|pdf|vsd|rar|log|dat|bak|sdb"}
current_time = int(time.time())

def check_bak(bak_dir):
    tmp_list = []
    for filepath,pathlist,filelist in os.walk(bak_dir):
        #filepath  fullpath
        #pathlist  fullpath child dir
        #filelist  child dir file
        if filepath.count("/") >= config["deep"] or ".svn" in pathlist:
            continue
        for filename in filelist:
            if os.path.islink("%s/%s" % (filepath, filename)) or "/." in filepath or filename.startswith(".") or re.findall(config["filetype"], filename.split(".")[-1], re.I) or re.findall(config["exclude"], filepath):
                continue
            elif 120 <= os.path.getsize("%s/%s" % (filepath, filename)) <= 10485760 and current_time - os.stat("%s/%s" % (filepath, filename))[-2] < 172800 and istext("%s/%s" % (filepath, filename)):
                tmp_list.append("%s/%s" % (filepath, filename))
    return tmp_list           

def istext(filename):
    s=open(filename).read(512)
    text_characters = "".join(map(chr, range(32, 127)) + list("\n\r\t\b"))
    _null_trans = string.maketrans("", "")
    if not s:
        # Empty files are considered text
        return True
    if "\0" in s:
        # Files with null bytes are likely binary
        return False
    # Get the non-text characters (maps a character to itself then
    # use the 'remove' option to get rid of the text characters.)
    t = s.translate(_null_trans, text_characters)
    # If more than 30% non-text characters, then
    # this is considered a binary file
    if float(len(t))/float(len(s)) > 0.30:
        return False
    return True

def create_tarfile(tar_name, filename, tar_list):
    if not os.path.isdir(tar_name):
        os.makedirs(tar_name)
    bak_tar = tarfile.open(tar_name + filename, "w:bz2")
    for i in tar_list:
        bak_tar.add(i)
    bak_tar.close()

def get_bak_dir():
    tmp = []
    with open("/etc/auto.nfs") as f:
        for i in f:
            if os.uname()[1] in i and not i.startswith("#"):
                tmp.append(i.split("/")[-1].rstrip())
    return tmp
                 
if __name__ == "__main__":
    ext_list = []
    with open(ext_user) as f:
        for i in f.read():
            ext_list = i.split()
    for dirname in get_bak_dir():
        if dirname in ext_list:
            continue
        file_list = check_bak("/local_home/" + dirname)
        if file_list:
            filename = time.strftime("/%F.tar.bz2", time.localtime())
            create_tarfile(tar_dir + "/" + dirname, filename, file_list)
            os.system("rsync -az --remove-source-files %s/%s%s %s:/bak/auto_bak/%s/" %(tar_dir, dirname, filename, bak_ser, dirname))



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-141393-1-1.html 上篇帖子: python eval方法转换字符串到字典类型时NameError 下篇帖子: 利用Python脚本进行删除不需要的行数 python
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表