[MacOS]經過Rename命令批量重命名文件

搬遷一篇舊文,原載於我我的搭建的博客網站,體驗下博客園的編輯器和展現效果。html

 

問題背景:

海賊王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.分析文件對象特徵

雖然各源的文件命名方式千奇百怪,但其中仍是有一些共同特徵的:spa

  • 文件名中有意義的信息爲:集數、文件格式;
  • 有兩種格式視頻:mp四、rmvb;
  • 文件名中有多個‘.’;
  • 集數中有‘-’。

同時進行的查閱資料、學習的過程,在此不表....net

3.研究成果展現及拆解

先上結果:unix

rename 's/\D*(\d+-?\d+).*\.(\w+)$/OnePiece-$1.$2/' *

 

釋義:將當前目錄下全部文件按正則表達式的規則進行重命名code


正則部分含義拆解:

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]

相關文章
相關標籤/搜索