背景
用阿里云盘下载大量大文件时,如果下载盘是HDD,会产生大量碎片,这简直是个灾难!考虑用SSD缓存,然后再剪切到HDD的方案,只需要设置几个参数,就可以自动转移SSD上的文件。
求个关注,谢谢~
参数解释
rootdir、ssd_disk、hdd_disk这几个参数,分别是SSD下载目录,SSD盘符,HDD盘符
逻辑解释
遍历下载目录下的文件夹,判断是否是临时文件,是则不动,不是则转移
代码输出
C:\Users\admin\AppData\Local\Programs\Python\Python38\python.exe D:/project/checkfile/move.py
=======================================================================
执行第1次
文件 E:\aliyun\********.mkv 下载完成,移动中
移动完成,文件大小 2573.120 MB 用时 17.490 s 文件速率 140.300 MB/s
文件 E:\aliyun\********.mkv 下载完成,移动中
移动完成,文件大小 2573.345 MB 用时 30.764 s 文件速率 79.771 MB/s
=======================================================================
执行第2次
没有文件了,退出
原目录已清空
进程已结束,退出代码为 0
上代码!
import os
import shutil
import time
def check(rootdir,ssd_disk,hdd_disk):
files_list = []
for root, dirs, files in os.walk(rootdir):
for file in files:
files_list.append(os.path.join(root, file))
for file in files_list:
if file.endswith(".part"): #判断结尾是否为.part
print('文件',file,'下载中')
else:
print('文件',file,'下载完成,移动中')
t0 = time.time()
size = os.path.getsize(file)
new_file = file.replace(ssd_disk,hdd_disk)
new_file_path = os.path.dirname(os.path.realpath(file)).replace(ssd_disk,hdd_disk)
if not os.path.exists(new_file_path):
os.makedirs(new_file_path)
if not os.path.exists(new_file):
shutil.move(file, new_file)
print('移动完成,文件大小 %.3f' % (size / 1000 / 1000), 'MB', '用时 %.3f' % (time.time() - t0), 's',
'文件速率 %.3f' % (size / 1024 / 1024 / (time.time() - t0 + 0.001)), 'MB/s')
else:
print('文件已存在')
return files_list
if __name__ == '__main__':
i = 1
rootdir = r'E:\aliyun' #此处设置固态硬盘下载目录
ssd_disk = "E:" #此处设置固态硬盘盘符
hdd_disk = "F:" #此处设置机械硬盘盘符
while True:
print('=======================================================================')
print('执行第' + str(i) + '次')
files_list = check(rootdir,ssd_disk,hdd_disk)
if files_list == []:
print('没有文件了,退出')
shutil.rmtree(rootdir)
os.makedirs(rootdir)
print('原目录已清空')
break
time.sleep(2) #此处设置时间间隔,目前是2秒一次
i += 1