目录文件备份工具
2007-10-17 23:03
183 查看
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# -*- coding: cp936 -*-
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'''这个程序实现了备份目录的功能,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
演示了如下
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
1)shutil模块中copy/copytree的使用方法;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
2)os.path模块isfile/isdir/join的使用方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
3)递归方法使用
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'''
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
import shutil
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
import os
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
def backupDir(pathsrc,pathdest):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'''备份目录pathsrc到pathdest
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
实现方法:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
查找源目录中的所有目录和文件,对每一项进行比较:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
1)如果源目录中的item不存在,直接复制到目标目录即可
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
2)如果源目录中的item是目录,则进行递归调用
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
3)如果源目录中的item是文件,比较的修改日期,如果源文件比目标文件新,则复制文件,否则不予处理
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
4) 不是目录或文件,直接复制,不再进行其他的判断
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'''
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if os.path.isdir(pathsrc):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
os.chdir(pathsrc)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for item in os.listdir(pathsrc):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
itemsrc = os.path.join(pathsrc,item)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
itemdest = os.path.join(pathdest,item)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# 先判断文件或目录是否存在,如果目标目录中没有这个文件或目录,直接复制即可
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if os.path.exists(itemdest):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# 如果是目录,进行递归调用
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if os.path.isdir(itemsrc):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
backupDir(itemsrc,itemdest)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# 如果是文件,进行修改时间的比较,若修改时间变化,覆盖目标文件
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
elif os.path.isfile(itemsrc):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if os.path.exists(itemdest):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if os.stat(itemsrc)[-2] > os.stat(itemdest)[-2]:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
shutil.copy(itemsrc,itemdest)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# 其他情况直接复制,不论是否改变
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
shutil.copy(itemsrc,itemdest)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# 如果不存在,复制整个目录或文件
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if os.path.isdir(itemsrc):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
shutil.copytree(itemsrc,itemdest)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
elif os.path.isfile(itemsrc):
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
shutil.copy(itemsrc,itemdest)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
os.chdir('..')
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
return
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
return
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# backupDir('c:/1','c:/2')
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
from Tkinter import *
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
root = Tk()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# 创建源目录
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label(root,text = "source directory:").grid(row = 0,column = 0,stick = W)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vSource = StringVar()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vSource.set('c:/1')
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Entry(root,textvariable = vSource).grid(row = 0,column = 1)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# 创建目标目录
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label(root,text = "destination directory:").grid(row = 1,column = 0,stick = W)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vDestination = StringVar()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vDestination.set('c:/2')
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Entry(root,textvariable = vDestination).grid(row = 1,column = 1)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
# 创建备份按钮
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Button(root,text = 'start backup directory',
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
command = lambda arg1 = vSource.get(),arg2 = vDestination.get():backupDir(arg1,arg2)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
).grid(row = 2,column = 0,columnspan = 2,stick = E + W + N + S)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
root.mainloop()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
相关文章推荐
- Ubuntu下文件及目录对比工具 Meld
- python把文件从一个目录复制到另外一个目录,并且备份
- itunes备份的文件在哪个目录的
- 文件目录备份bat
- 使用tar归档备份并排除某些文件或目录
- 几款在线文件同步和备份的网站和工具
- 将Linux系统的多个目录及文件备份并压缩到一个文件,以方便查看和维护
- Python学习笔记(三):文件和目录工具
- 安装交叉编译工具,执行arm-linux-gcc –v命令出现提示找不到该文件或目录?解决方法(转)
- 对指定文件或目录进行压缩和解压缩的工具类总结
- VNC XEN 双鼠标问题 以及 使用 virt-manager 工具创建的 Xen 虚拟机配置文件不在 /etc/xen/ 目录中了
- Linux命令工具基础02 文件及目录管理
- 【FileUtils】File对文件与目录的处理&FileUtis工具的使用
- excel文件目录的文件批量合并工具,欢迎大家使用!
- 《使用shell位置变量进行目录文件的备份小脚本》
- 用CEImageDiff.exe工具备份WINCE的工程文件
- 微软ImageX工具*.wim文件的备份与恢复
- Python学习笔记(三):文件和目录工具
- 用CEImageDiff.exe工具备份WINCE的工程文件
- 安装交叉编译工具,执行arm-linux-gcc –v命令出现提示找不到该文件或目录?解决方法