今天準(zhǔn)備把Mac的系統(tǒng)升級一下,忽然發(fā)現(xiàn)沒有足夠的升級空間,一頓操作猛如虎后,發(fā)現(xiàn)空間還是……??,也試過按照網(wǎng)上的一些教程,下載了檸檬等清理軟件,發(fā)現(xiàn)能清理出來一些空間,但是對于升級需要的空間來說,還是……最后只能祭出萬能的python。這里記錄一下,并且提供源碼,有需要的拿走,不過請勿用于商用。
1、首先檸檬還是一個好工具,因?yàn)檫@里節(jié)省了不少時間,首先用檸檬做一下簡單的清理,接下來用大招啦
使用檸檬的磁盤空間分析,這是一個非常棒的工具,可以可視化看到你的空間都在哪里被占用了

分析后可以看到,大部分的空間都是被用戶這個文件夾占用了

我們當(dāng)然是先找胖的下手啦通過層層的分析后,發(fā)現(xiàn)我的空間都被小馬哥吃了??


這里前面幾個都是吃磁盤的大戶(這里是我已經(jīng)優(yōu)化后的截圖,優(yōu)化前占用磁盤空間更加多),占用空間比較多的都是聊天軟件(??工作原因,要和阿里還有騰訊的人溝通,還有公司自己用的企業(yè)微信,所以磁盤都被微信,企業(yè)微信,釘釘,QQ這些吃了好多),這里以企業(yè)微信為例,看看里面都有啥

“Upgrade”里面放的企業(yè)微信自己升級的時候的下載的文件,這個文件夾下面的可以直接清空,因?yàn)橄嘈胚@些成熟的軟件,會自己下載,這里只是一個歸檔的作用,不過這里不是主要的,這里可以看到Library和Documents兩個才是大戶,本著吃大戶的原則,我們進(jìn)入這兩個目錄里面翻了一遍,??好可怕,發(fā)現(xiàn)聊天過程中的圖片,語音,視頻還有文件等都在這里面。而這里的文件我們一些時候還是需要用的,因?yàn)榍謇砗笪⑿诺牧奶煊涗浘痛虿婚_這個文件了。但是不解決這個問題,我們的空間就釋放不出來,所以最好的辦法是備份下。到了這里,我們就有思路啦,把幾個聊天軟件下的這些文件都備份起來,需要的時候到備份里面去找就好(還有一個辦法是備份的過程中,記錄下來備份前的路徑,升級結(jié)束后再還原回去,不過我自己沒這個需要,所以這里沒有采用)。下面的過程就非常簡單了,用python把這些目錄下,做一個遍歷,把自己需要備份的文件備份到移動硬盤下就??了。下面上代碼:
#!/usr/bin/python3
import os
import shutil
#需要掃描的路徑
rootpath='/Users/xxxx/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/33eab142f8eb6af75af3670923e57480/Message/MessageTemp'
# rootpath='/Users/xxxxx/Library/Containers/com.tencent.WeWorkMac/Data/Library/Application Support/WXWork/Data'
#備份的root路徑
bakroot='/Volumes/disk/AutoBackup'
#掃描的文件類型
filesname=['.png','.ppt','.pptx','.doc','.docx','.csv','.txt','.jpg','.mp4','.avi','.xlsx','.xls','.wps','.pdf','jpeg','.mov','.bmp','.gif','.rar','.zip','.gz']
def run():
dirs= getdirs(rootpath)
# for dir in dirs:
# print(dir)
#獲取掃描路徑下的文件,返回一個list
def getfiles(rootpath):
for rootpath,dirs, files in os.walk(rootpath, topdown=False):
for name in files:
print(os.path.join(rootpath, name))
return files
#判斷目錄是否存在,不存在則創(chuàng)建
def makedirs(path,dir):
if os.path.exists(path+'/'+dir):
print('目標(biāo)文件夾已經(jīng)存在')
else:
os.makedirs(path+'/'+dir)
#獲取掃描路徑下的子文件夾,返回一個list
def getdirs(rootpath):
for rootpath, dirs,files in os.walk(rootpath, topdown=False):
for name in dirs:
dirpath=os.path.join(rootpath, name)
print(dirpath)
# 獲取文件夾下的文件列表
files=getfiles(dirpath)
for file in files:
case_paht = os.path.splitext(file)[1]
if case_paht in filesname:
print('找到符合要求的文件')
# 判斷這個類型的目標(biāo)文件夾是否存在,不存在則創(chuàng)建
makedirs(bakroot,case_paht)
#移動文件到目標(biāo)文件夾
newfile=file.replace('&','')#/?~^&*
try:
shutil.move(os.path.join(dirpath, file),os.path.join(bakroot+'/'+case_paht, newfile))
except:
print('')
else:
print("文件不符合目標(biāo)文件")
return dirs
run()
上面大家可以根據(jù)自己的實(shí)際情況修改為自己的路徑以及字節(jié)需要備份的路徑和掃描的文件類型。

運(yùn)行后,妥妥的幾個G的空間又出來啦??