有些资料需要备份,刚好开始学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没有;