博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
byte_of_python中的备份脚本
阅读量:6815 次
发布时间:2019-06-26

本文共 3891 字,大约阅读时间需要 12 分钟。

要求:

1.需要备份的文件和目录由一个列表指定。

2.备份应该保存在主备份目录中。

3.文件备份成一个zip文件。

4.zip存档的名称是当前的日期和时间。

初始实现版本:

1 # Filename:backup_v1.py 2  3 import os 4 import time 5  6 # 1.需要备份的源文件列表 7 # 问题:暂时无法解决源文件名中带有空格的情况(如C:\test 1目录) 8 # Linux 9 #source = ['/root/test1','/root/test2']10 # Windows11 #source = ['C:\\test1','C:\\test2']12 source = [r'C:\test1',r'C:\test2']13 14 # 2.备份的目标文件目录15 # Linux16 #target_dir = '/root/backup'17 # Windows18 target_dir = r'D:\backup'19 20 # 3.压缩文件名字21 target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'22 23 # 4.zip命令24 # Linux25 #zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))26 # Windows(压缩软件为7-Zip)27 #zip_command = r"D:\Progra~1\7-Zip\7z.exe a {0} {1}".format(target, ' '.join(source))28 zip_command = r"D:\Progra~1\7-Zip\7z.exe a %s %s" %(target, ' '.join(source))29 30 # 5.运行备份命令31 if os.system(zip_command) == 0:32     print('Successful backup to', target)33 else:34     print('Backup FAILED')

 

改进版1:

更好的文件命名机制--当前日期作为子目录名,当前时间作为压缩文件名

优点1:备份以分层形式存储,便于管理

优点2:文件名变短

优点3:方便检查每日备份

1 # Filename:backup_v2.py 2  3 import os 4 import time 5  6 # 1.需要备份的源文件列表 7 # 问题:暂时无法解决源文件名中带有空格的情况(如C:\test 1目录) 8 # Linux 9 #source = ['/root/test1','/root/test2']10 # Windows11 #source = ['C:\\test1','C:\\test2']12 source = [r'C:\test1',r'C:\test2']13 14 # 2.备份的目标文件目录15 # Linux16 #target_dir = '/root/backup'17 # Windows18 target_dir = r'D:\backup'19 20 # 3.当前日期作为在主备份目录下的子目录21 today = target_dir + os.sep +time.strftime('%Y%m%d')22 23 # 4.当前时间作为压缩文件名24 now = time.strftime('%H%M%S')25 26 # 5.创建子目录若其不存在27 if not os.path.exists(today):28     os.mkdir(today) # 创建目录29     print('Successfully created directory', today)30 31 # 6.压缩文件的完整名字32 target = today + os.sep + now + '.zip'33 34 # 7.zip命令35 # Linux36 #zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))37 # Windows(压缩软件为7-Zip)38 #zip_command = r"D:\Progra~1\7-Zip\7z.exe a {0} {1}".format(target, ' '.join(source))39 zip_command = r"D:\Progra~1\7-Zip\7z.exe a %s %s" %(target, ' '.join(source))40 41 # 8.运行备份命令42 if os.system(zip_command) == 0:43     print('Successful backup to', target)44 else:45     print('Backup FAILED')

 

改进版2:

 在备份文件名中新增用户备注信息:

1 # Filename:backup_v3.py 2  3 import os 4 import time 5  6 # 1.需要备份的源文件列表 7 # 问题:暂时无法解决源文件名中带有空格的情况(如C:\test 1目录) 8 # Linux 9 #source = ['/root/test1','/root/test2']10 # Windows11 #source = ['C:\\test1','C:\\test2']12 source = [r'C:\test1',r'C:\test2']13 14 # 2.备份的目标文件目录15 # Linux16 #target_dir = '/root/backup'17 # Windows18 target_dir = r'D:\backup'19 20 # 3.当前日期作为在主备份目录下的子目录21 today = target_dir + os.sep +time.strftime('%Y%m%d')22 23 # 4.当前时间作为压缩文件名24 now = time.strftime('%H%M%S')25 26 # 5.创建子目录若其不存在27 if not os.path.exists(today):28     os.mkdir(today) # 创建目录29     print('Successfully created directory', today)30 31 # 6.新增部分:备份文件完整名字+[用户备注信息]32 comment = input('Enter a comment --> ')33 if len(comment) == 0:34     target = today + os.sep + now + '.zip'35 else:36     target = today + os.sep + now + '_' + comment.replace(' ', '_') + '.zip'37 38 # 7.zip命令39 # Linux40 #zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))41 # Windows(压缩软件为7-Zip)42 #zip_command = r"D:\Progra~1\7-Zip\7z.exe a {0} {1}".format(target, ' '.join(source))43 zip_command = r"D:\Progra~1\7-Zip\7z.exe a %s %s" %(target, ' '.join(source))44 45 # 8.运行备份命令46 if os.system(zip_command) == 0:47     print('Successful backup to', target)48 else:49     print('Backup FAILED')

改进版2对大多数用户来说,已经是一个令人满意的可运行脚本了。

还可以使用的压缩命令:

tar = 'tar -cvzf %s %s -X /home/swaroop/excludes.txt' % (target, ' '.join(srcdir))

选项解释如下:

  • -c表示创建一个归档。

  • -v表示交互,即命令更具交互性。

  • -z表示使用gzip滤波器。

  • -f表示强迫创建归档,即如果已经有一个同名文件,它会被替换。

  • -X表示含在指定文件名列表中的文件会被排除在备份之外。例如,你可以在文件中指定*~,从而不让备份包括所有以~结尾的文件。

 

注意:

最重要的改进应该是不要使用os.system的方式创建压缩文档,取而代之应该使用zipfile或tarfile内建模块去创建这些压缩文档。它们是标准库的一部分,可供你使用,且不需要外部依赖于zip程序在你的计算机上可用。

 zipfile和tarfile模块信息见:

 

转载于:https://www.cnblogs.com/fortwo/archive/2013/04/17/3025361.html

你可能感兴趣的文章
程序员可以干到多少岁?
查看>>
Storm系列(六)storm和kafka集成
查看>>
东南亚的招聘骗局,程序员请注意!
查看>>
Android 获得View宽高的几种方式
查看>>
iOS正则表达式
查看>>
关于javascript的this指向问题
查看>>
Promise的理解和用法
查看>>
java B2B2C Springboot电子商城系统-高可用的服务注册中心
查看>>
Dubbo的总体架构
查看>>
Spring Cloud微服务架构代码结构详细讲解
查看>>
以太经典硬分叉:矿工欢喜、投资者欢庆、社区高兴的“三赢”之举
查看>>
我的友情链接
查看>>
LVS启(禁)用成员
查看>>
innobackupex 备份报错
查看>>
2016 IT 运维工作计划及学习
查看>>
将一个数的二进制位模式从左到右翻转并输出
查看>>
jQuery学习之jQuery Ajax用法详解
查看>>
关于JEPLUS软件介绍——JEPLUS软件快速开发平台
查看>>
动态增加UIView到当前视图中
查看>>
怎么能看透信封
查看>>