rename 是一隻 Perl script,在做檔案的大量重新命名很方便,支援 regex,詳細介紹可見此篇:Linux > 大量修改檔名的工具 - rename
不過此次遇到的問題,是輸出的檔名想要做 sprintf() 的格式設定(例如:補0:1、2、3 改成 01、02、03),要怎麼做呢?
Linux 大量修改檔名 rename 進階的格式處理
先做幾個檔案測試:
- touch 2011-1-1.jpg
- touch 2011-2-2.jpg
- touch 2011-11-2.jpg
- rename -n 's/(\d+)-(\d+)-(\d+)/$1_$2_$3/' *.jpg # 把 2011-1-1, 2011-2-2 改成 2011_1_1, 2011_2_2,測試看看 regex 是否正常,-n 先測試看結果,不要修改檔名
再來就是主要想做的,想要將
- 2011-1-1.jpg → 2011-01-01.jpg
- 2011-2-2.jpg → 2011-02-02.jpg
- 2011-11-2.jpg → 2011-11-02.jpg
在 rename 使用 sprintf 的寫法:
- rename -n 's/(\d+)-(\d+)-(\d+)/sprintf("%4s-%02s-%02s", $1, $2, $3)/e' *.jpg
- rename(2011-1-1.jpg, 2011-01-01.jpg)
- rename(2011-2-2.jpg, 2011-02-02.jpg)
- rename(2011-11-2.jpg, 2011-11-02.jpg)
- 參考此篇:Perl rename command - Perl one-liners cookbook
- rename GitHub 可見:GitHub - subogero/rename: Perl rename as a separate package