利用python备份文件夹
以前写过一个非常白痴的备份脚本,就是将着整个我文件夹都拷贝到u盘里,每次拷贝前都将已经存在的文件夹删除掉。这样的话程序就很傻瓜代码也很少
1 import os 2 3 def backup(from_path,to_path): 4 if os.path.exists(to_path): 5 os.system('rm -rf to_path') 6 os.system('cp from_path to_path')
今天在python cookbook上看到一段代码,这段代码也是利用python进行备份文件夹,但是它的程序要聪明一点,只拷贝那些还未被备份的文件
1 import os,sys,shutil,filecmp 2 3 #def backup(path,backdirname = 'back'): 4 # for dir,subdir,files in os.walk(path): 5 # if backdirname not in subdir: 6 # backdir = os.path.join(dir,backdirname) 7 # os.mkdir(backdir) 8 # subdir[:] = [d for d in subdir if d !=backname] 9 # for file in files: 10 # filepath = os.path.join(dir,file) 11 # for index in xrange(100): 12 # backfile = '%s.%2.2%d'%(file,index) 13 # backpath = os.path.join(dir,backfile) 14 # if os.path.exists(backpath):break 15 # if index>0: 16 # old_backpath 17 18 def backup(path,backdir_name='backdir'): 19 MAXVERSIONS = 100 20 for dir,subdir,files in os.walk(path): 21 backdir = os.path.join(dir,backdir_name) 22 if not os.path.exists(backdir): 23 os.mkdir(backdir) 24 25 subdir[:] = [d for d in subdir if d != backdir_name] 26 for file in files: 27 filepath = os.path.join(dir,file) 28 backpath = os.path.join(backdir,file) 29 30 for index in xrange(MAXVERSIONS): 31 backfile_name = '%s.%2.2d'%(backpath,index) 32 if not os.path.exists(backfile_name):break 33 34 35 if index>0: 36 old_backup = '%s.%2.2d'%(backpath,index-1) 37 abspath = os.path.abspath(filepath) 38 try: 39 if os.path.isfile(abspath) and filecmp.cmp(old_backup,abspath,shallow = False): 40 continue 41 except OSError: 42 pass 43 44 try: 45 shutil.copy(filepath,backfile_name) 46 except OSError: 47 pass 48 if __name__ == '__main__': 49 path = raw_input('please input the backup dir:') 50 backup(path)