來(lái)整理一下囤了N年的照片吧!

背景: 看著越來(lái)越不靠譜的百度盤(pán), 想起自己還存著好幾年的照片在上面, 是唯一的儲(chǔ)備, 就有點(diǎn)慌. 于是某天花了點(diǎn)時(shí)間全部下了下來(lái), 80多g, 3300多個(gè)文件, 放在一個(gè)文件夾里
顯然, 面對(duì)這么一個(gè)超大的文件夾和這么多文件, 無(wú)論是查閱還是備份都十分不方便, 簡(jiǎn)直反人類(lèi)
"書(shū)到用時(shí)方恨少", 慨嘆自己貧瘠的知識(shí), 跌跌撞撞試著寫(xiě)了一個(gè)工具來(lái)整理
思路:
方向很自然地應(yīng)該考慮按時(shí)間來(lái)分類(lèi)文件, 那么就這么整理:
2011
+1
++1.jpg
++2.jpg
+5
++3.jpg
++1.mp4
以年為名分類(lèi)建立文件夾, 其中以月為名再分類(lèi)建立文件夾, 存放相應(yīng)日期的照片
日期讀取:
一般理想狀態(tài), 文件日期是鼠標(biāo)右擊"屬性"里的日期
但事情往往沒(méi)有這么簡(jiǎn)單, 文件導(dǎo)出遷移, 屬性里的日期可能不是其真實(shí)拍攝日期, 可以利用照片的EXIF信息, 里面有一項(xiàng)"CreateDate"存放著其拍攝時(shí)的日期
關(guān)于EXIF, 詳見(jiàn): https://en.wikipedia.org/wiki/Exif
然而要是照片視頻的EXIF信息也"掉了", 那還有最后一個(gè)線索就是文件名, 文件名一般有類(lèi)似
2014-03-04
20140304
這樣兩種格式, 通過(guò)正則可以分析出來(lái)
所以, 要獲取日期需要去嘗試獲得這三種日期來(lái)求最小值, 即最原始時(shí)期的值
這是獲取日期的基本思路
文件入口:
考慮到方便使用, 用戶(hù)只需要指定一個(gè)文件夾即可, 通過(guò)函數(shù)遞歸遍歷其內(nèi)部所有文件并返回一個(gè)"平坦的"數(shù)組
整理方式:
考慮到風(fēng)險(xiǎn), 程序通過(guò)復(fù)制的方式來(lái)整理文件, 不會(huì)對(duì)原文件做改動(dòng), 就算程序有bug也要保證原文件的安全
于是, 遵循著以上基本理念, 一番折騰就有了下面這個(gè)工具
https://www.npmjs.com/package/classify-my-files
已放到了npm上, 方便下載使用
由于代碼里用了'fsPromises'導(dǎo)致了需要目前最新的node v10環(huán)境, 可以在這個(gè)鏈接下載
http://nodejs.cn/download/
說(shuō)實(shí)話(huà), 畢竟學(xué)藝不精, 代碼還是寫(xiě)得亂七八糟, 但能用, 望各位海涵??
自己試了一下那80多g的文件, 還好一個(gè)不落地全部復(fù)制了, 只是極個(gè)別文件日期很是迷, 但絕大多數(shù)達(dá)到了預(yù)期, 還算是成功了