背景:
最近在整理以前的老照片,也買了一個刻錄機,想将以前的老照片刻錄成光盤做一個備份。
但是碰到一個問題,老照片有幾百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)
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!