用zip备份文件的脚本

有些资料需要备份,刚好开始学Python,所以写一个脚本进行备份,上代码

20171123 更新

1, 增加了备注功能;

2, 支持了创建目标文件功能;

3, 支持了判断各目标功能是否存在的功能;

4, 支持了tar压缩功能;

#!/usr/bin/python
# -*- coding:utf8 -*-
# Filename:backup.py

import os #系统模块
import sys
import stat
import re #
import time #时间模块
import pdb #断点模块
import logging #日志模块
import tarfile #tar压缩模块
import zipfile #zip压缩模块


#压缩格式
type = raw_input('请输入你所需要的压缩格式,如tar,zip,按Enter键结束.没有则按Enter键,默认以tar格式压缩 --> ')
type = type.lower()

#源目录或源文件路径列表
source = ['/opt/wwwroot/test/1', '/home/c80k2/Jason/php']

#添加源目录或源文件路径
source_add = raw_input('请输入要额外备份的文件或目录路径,多个路径之间用单个空格分隔,按Enter键结束.如果没有请直接按Enter键 --> ')
#将新增源目录或源文件转换为列表
source_add = source_add.split()
#将新增列表并入原列表
source.extend(source_add)

#对源列表目录进行校验
for s in source[:]:
    if not os.path.exists(s):
        source.remove(s)
        #logging.info('%s %s not exist' % (time.strftime('%Y-%m-%d %H:%m:%s'), s))
        print '%s %s not exist' % (time.strftime('%Y-%m-%d %H:%M:%S'), s)

# 如果不存在要备份的源目录或源文件则直接退出此脚本
if len(source) == 0:
    print '没有要备份的目录或文件,将退出此脚本'
    exit()

#为备份创建备注信息
comment = raw_input('请为本次备份添加备注信息(备注不能含有特殊字符),按Enter键结束.如果没有请直接按Enter键 --> ')
#替换~/\等特殊字符,将导致压缩包命名错误
comment = comment.replace('~', '').replace('/', '').replace('\\', '')

#当天日期
today = time.strftime('%Y%m%d')

#存放备份文件的默认目录路径
target_dir = '/home/c80k2/Jason/zip_backup/' + today + '/'

#用户自定义备份输出目录
new_target_dir = raw_input('请为本次备份设置输出目录(必须是绝对路径),按Enter键结束.如果没有请按Enter键,\n'
                           '不设置或者创建该目录失败时,将默认在%s中输出 --> ' % target_dir)

#如果用户输入了目录
if new_target_dir != '':
    #如果用户自定义的目录路径不含/则加上/
    if not new_target_dir.endswith('/'):
        new_target_dir += '/'
    #如果用户自定义的目录存在并且是绝对路径
    if (os.path.exists(new_target_dir) and os.path.isabs(new_target_dir)):
        target_dir = new_target_dir
        print '您设置的输出目录OK,备份文件将在%s中输出 --> ' % target_dir
    #如果用户自定义的目录不存在或者不是一个绝对路径目录则创建它
    else:
        try:
            #创建用户自定义的目录
            os.makedirs(new_target_dir, 0755)
            #创建成功则赋值
            target_dir = new_target_dir
            print '您设置的输出目录创建成功,备份文件将在%s中输出 --> ' % target_dir
        except:
            print 'Error: 您设置的输出目录创建失败,备份文件将默认在%s中输出 --> ' % target_dir

#创建存放备份文件的目录
if not os.path.exists(target_dir):
    os.makedirs(target_dir, 0755)
    print '成功创建目录%s' % target_dir

##压缩包名称和压缩命令
time = time.strftime('%H%M%S')

if type == 'zip':
    target = target_dir + time + comment + '.zip'
    command = "zip -Jr %s %s" % (target, ' '.join(source)) #有前面的目录结构
else:
    target = target_dir + time + comment + '.tar'
    command = "tar -czPvf %s %s" % (target, ' '.join(source)) #-P支持绝对路径

print command

#如果执行成功
if os.system(command) == 0:
    print '成功备份至', target
else:#如果执行失败
    print '备份失败'

执行情况

/usr/bin/python2.7 /home/c80k2/PycharmProjects/test/backup.py
请输入你所需要的压缩格式,如tar,zip,按Enter键结束.没有则按Enter键,默认以tar格式压缩 --> tar
请输入要额外备份的文件或目录路径,多个路径之间用单个空格分隔,按Enter键结束.如果没有请直接按Enter键 --> /avcxx/ /as /as backup.py
/opt/wwwroot/test/1
/home/c80k2/Jason/php
/avcxx/
2017-11-23 11:51:53 /avcxx/ not exist
/as
2017-11-23 11:51:53 /as not exist
/as
2017-11-23 11:51:53 /as not exist
backup.py
请为本次备份添加备注信息(备注不能含有特殊字符),按Enter键结束.如果没有请直接按Enter键 --> test
请为本次备份设置输出目录(必须是绝对路径),按Enter键结束.如果没有请按Enter键,
不设置或者创建该目录失败时,将默认在/home/c80k2/Jason/zip_backup/20171123/中输出 --> /home/c80k2/桌面/2
您设置的输出目录创建成功,备份文件将在/home/c80k2/桌面/2/中输出 --> 
tar -czPvf /home/c80k2/桌面/2/115403test.tar /opt/wwwroot/test/1 /home/c80k2/Jason/php backup.py
/opt/wwwroot/test/1/
/opt/wwwroot/test/1/22/
/opt/wwwroot/test/1/test10.py
/home/c80k2/Jason/php
backup.py
成功备份至 /home/c80k2/桌面/2/115403test.tar

Process finished with exit code 0

感觉

1, Python的语法相对比较简单,但是由于PHP的先入为主,读写习惯方面还需要适应;

2, Python的断点调试方面不是很方便,PHP的var_dump()是一个非常好的调试工具,但是Python没有;

转载于:https://my.oschina.net/u/3412738/blog/1574182

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值