背景:

最近在整理以前的老照片,也买了一个刻录机,想将以前的老照片刻录成光盘做一个备份。

但是碰到一个问题,老照片有几百GB,每张光盘只能存4.7 GB,就需要将文件夹进行分割。

刻录软件分割会将同一个文件数据切分到不同光盘。

想到用压缩软件,分卷压缩,指定卷大小,但是这个方法有问题:

A:光盘上的文件没法直接浏览。

B:最终会刻录几十张盘,如果有一张损坏或者遗失,整个数据就会丢失。

网上找了 Folder Axe,可以将文件夹按大小切分,但是他将文件整体平铺切分到指定目录下,没有保留原文件路径信息。

找了半天,没办法,只好自己用python写了一个工具来切分文件夹,满足如下功能:

1:可以指定切分后文件夹大小,保证切分后每个文件夹小于等于指定大小。

2:保留原目录结构(备注:一个子文件夹可能会被切分到多个目标文件夹下)。


用法:

python filesplit.py 源文件夹 目标文件夹 大小(单位 GB,4.7GB则输入 4.7)


import os import shutil import sys import os g_src_dir = '' g_dst_dir = '' g_folder_index = 0 g_cd_size = 4.7 g_sum_size = 0 def SplitFolder(src_dir_name): try: ls=os.listdir(src_dir_name) isexists=os.path.exists(g_dst_dir) if not isExists: os.makedirs(g_dst_dir) except Exception as e : print 'dir error.' repr(e) else: for fn in ls: tempfile=os.path.join(src_dir_name,fn) if (os.path.isdir(tempfile)): SplitFolder(tempfile) else: temprealpth = tempfile[len(g_src_dir) 1:] try: size = os.path.getsize(tempfile) global g_sum_size if g_sum_size size > (g_cd_size -0.1)*1000*1000*1000 : g_sum_size = 0 global g_folder_index g_folder_index = g_folder_index 1 g_sum_size = g_sum_size size dstpath = os.path.join(os.path.join(g_dst_dir,'cd' str(g_folder_index)),temprealpth) (tempfilepath, tempfilename) = os.path.split(dstpath) isExists = os.path.exists(tempfilepath) if not isExists: os.makedirs(tempfilepath) print 'mv file:' tempfile ':' dstpath cmd = 'cp -f "' tempfile '" "' dstpath '"' cmdnew = cmd.replace('\\','\\\\') #print cmdnew #os.system (cmdnew) shutil.copy2(tempfile, dstpath) except Exception as e : print 'error path:' tempfile print 'error.' repr(e) print('mv end!') if __name__ == "__main__": if len(sys.argv) < 3 : print(" args < 3") print 'sourcepath dstpath size(ex:4.7)' exit() g_src_dir = sys.argv[1] g_dst_dir = sys.argv[2] g_cd_size = float(sys.argv[3]) g_folder_index = 0 print 'sourcepath: ' g_src_dir print 'dstpath: ' g_dst_dir print 'size: ' str(g_cd_size) SplitFolder(g_src_dir)


python批量分割(python写的文件夹分割工具)(1)

,