搬遷一篇舊文,原載於我個人搭建的博客網站,體驗下博客園的編輯器和展示效果。
問題背景:
海賊王OnePiece動畫連載已近800集,由於之前是從不同渠道(漢化組、動漫論壇等)下載的,文件命名規則自成一套體系。
對於有輕度收集癖和強迫症的我來說,進行分類管理以及命名規則的統一,蓄謀已久。
It's time!
需求列表:
- 兼容現有的各種命名規則
- 名稱統一轉換為:OnePiece-xxx
- 保留原有的視頻格式后綴
實現過程
1. 通過Homebrew安裝rename
2. 分析文件對象特征,補充知識
3. 研究成果展示及拆解
1.安裝rename
MacOS未自帶rename命令,遂通過Homebrew安裝:
brew install rename
按所查資料得知, rename 的參數用法與 sed 相似,結果研究半天后發現不完全一致,后來發現,安裝的rename是用Perl寫的,因此研究了下Perl的正則表達式,順便學習了下各類正則的差異(鏈接見文末參考文檔)。
2.分析文件對象特征
雖然各源的文件命名方式千奇百怪,但其中還是有一些共同特征的:
- 文件名中有意義的信息為:集數、文件格式;
- 有兩種格式視頻:mp4、rmvb;
- 文件名中有多個‘.’;
- 集數中有‘-’。
同時進行的查閱資料、學習的過程,在此不表...
3.研究成果展示及拆解
先上結果:
rename 's/\D*(\d+-?\d+).*\.(\w+)$/OnePiece-$1.$2/' *
釋義:將當前目錄下所有文件按正則表達式的規則進行重命名
正則部分含義拆解:
s/ // 替換模式 \D*(\d+-?\d+).*\.(\w+)$ // 需被替換的字符串 / // 分隔符(固定) OnePiece-$1.$2 // 新的字符串 / // 結束符
Part1.繼續拆解 \D*(\d+-?\d+).*\.(\w+)$ :
\D* // 任意多的非數字字符 (\d+-?\d+) // 連續的數字,可能存在'-'(如:251-252,兩集連播) .* // 任意多的字符 \.(\w+)$ // 獲得文件擴展名(以‘.英文字母’結尾,如:.mp4 或 .rmvb)
Part2.繼續拆解 OnePiece-$1.$2 :
OnePiece- // 普通字符串,重新命名的固定前綴 $1 // 獲取第一個'()'內的字符串,即:文件的編號 . // 普通字符‘.’ $2 // 獲取第二個'()'內的字符串,即:文件擴展名
參考文檔:
[Perl的正則表達式][http://www.chinaunix.net/old_jh/25/159388.html]
[Linux Shell 正則表達式(BREs,EREs,PREs)差異比較][http://blog.csdn.net/fdl19881/article/details/7800877]