ここではホームフォルダ内のフォルダ "work" の中に以下の4つのファイルがあるとして,renameコマンドの例を示す。
"42. Protokoll_01_07.pdf"
"43. Protokoll 2 September 2014.pdf"
"44. Protokoll 09 09.pdf"
"45. Protokoll FSMa 16 September.pdf"
0. 元のファイル名
まず、ターミナルを立ち上げる。次にコマンド cd workで workフォルダ内に移動する。
ここで コマンド ls を入力すると,フォルダ内にどんなファイルがあるか確認出来る。
xxx@yyyy:~$ cd work xxx@yyyy:~/work$ ls 42. Protokoll_01_07.pdf 43. Protokoll 2 September 2014.pdf 44. Protokoll 09 09.pdf 45. Protokoll FSMa 16 September.pdf xxx@yyyy:~/work$
1-1. 置換 文字 "September" を数字 "9" に変換する
$ sudo rename 's/September/9/' *.pdf
ここで、*.pdf はフォルダ内のすべての PDFファイルという意味。
's/September/9/' で "September" を "9" に置換するという意味。
置換後
42. Protokoll_01_07.pdf
43. Protokoll 2 9 2014.pdf
44. Protokoll 09 09.pdf
45. Protokoll FSMa 16 9.pdf
1-2. 置換 最初の空白をアンダーバー "_" に変換する
$ sudo rename 's/ /_/' *.pdf
空白はそのまま空白にしておけばいい。空白には \s と入力するらしいが、空白でも大丈夫。
置換後
42._Protokoll_01_07.pdf
43._Protokoll 2 9 2014.pdf
44._Protokoll 09 09.pdf
45._Protokoll FSMa 16 9.pdf
1-3. 置換 すべての空白をアンダーバー "_" に変換する。
$ sudo rename 's/ /_/g' *.pdf
上のコマンドとほぼ同じだが,最後に g が入る。これですべての空白が "_" に置換される。
置換後
42._Protokoll_01_07.pdf
43._Protokoll_2_9_2014.pdf
44._Protokoll_09_09.pdf
45._Protokoll_FSMa_16_9.pdf
1-4. 置換 1桁の数字を0をつけて2桁の数字に変換する。(例 2 -> 02)
$ sudo rename 's/\d+/sprintf("%02d", $&)/eg' *.pdf
ここで、\d+ で数字を取得し,その数時が1桁なら sprintf("%02d", $&) を使って十の位に "0" を補う。sprintf("%02d", $&) は文字や数字を返す perl の関数。$& には \d+ で取得した数字が入る。(参照:6)
また、perl の関数 (コマンド) を利用する時には最後に e が入る。(参照:4,5)
置換後
42._Protokoll_01_07.pdf
43._Protokoll_02_09_2014.pdf
44._Protokoll_09_09.pdf
45._Protokoll_FSMa_16_09.pdf
1-5. 置換 大文字を小文字に置換する
$ sudo rename 'y/A-Z/a-z/' *.pdf
文字を置換するときには 'y/before/after/' とする。
置換後
42._protokoll_01_07.pdf
43._protokoll_02_09_2014.pdf
44._protokoll_09_09.pdf
45._protokoll_fsma_16_09.pdf
2-1. 削除 最初のドット "." を削除する。
$ sudo rename 's/.//' *.pdf
単に削除する時には何も書かず,空欄も入れない。
削除後
42_protokoll_01_07.pdf
43_protokoll_02_09_2014.pdf
44_protokoll_09_09.pdf
45_protokoll_fsma_16_09.pdf
3-1. 補完 先頭に文字や数字を補完する
$ sudo rename 's/^/0/' *.pdf
^ でファイル名の先頭を指定している。
補完後
042_protokoll_01_07.pdf
043_protokoll_02_09_2014.pdf
044_protokoll_09_09.pdf
045_protokoll_fsma_16_09.pdf
3-2. 補完 最後(拡張子の前)に文字や数字を補完する
$ sudo rename 's/.pdf/_tokyo.pdf/' *.pdf
拡張子がない場合には 's/$/補完する文字列/' とすればよい。
補完後
042_protokoll_01_07_tokyo.pdf
043_protokoll_02_09_2014_tokyo.pdf
044_protokoll_09_09_tokyo.pdf
045_protokoll_fsma_16_09_tokyo.pdf
3-3. 補完 中間(月とtokyoの間)に数字(年号)を補完する
$ sudo rename 's/(_\d{2})(_tokyo)/$1_2014$2/' *.pdf
文字列をカッコでくくると一つのグループとみなされ,$1 には1番目の、$2 には2番目のグループが対応する。
補完後
042_protokoll_01_07_2014_tokyo.pdf
043_protokoll_02_09_2014_tokyo.pdf
044_protokoll_09_09_2014_tokyo.pdf
045_protokoll_fsma_16_09_2014_tokyo.pdf
4-1. 連番 先頭の3桁の数字を 01 から始まる2桁の連番にする。
$ sudo rename 's/\d{3}/our $i; sprintf("%02d", 1+$i++)/e' *.pdf
our $i; で連番に使う変数を定義し、1+$i++ で 1,2,3, ... となるように指定している。
そして、関数 sprintf で連番が 01, 02, 03, ... となるように指定している。(参照:6,7)
変更後
01_protokoll_01_07_2014_tokyo.pdf
02_protokoll_02_09_2014_tokyo.pdf
03_protokoll_09_09_2014_tokyo.pdf
04_protokoll_fsma_16_09_2014_tokyo.pdf
5-1. 入れ替え 日付が _日_月_年_ となっているので、_日_月_年_ と並べ替える。
$ sudo rename 's/(_\d{2})(_\d{2})(_\d{4})/$3$2$1/' *.pdf
3-3. の応用例、$1=(_\d{2})、$2=(_\d{2})、$3=(_\d{4}) となっている。変更後
01_protokoll_2014_07_01_tokyo.pdf
02_protokoll_2014_09_02_tokyo.pdf
03_protokoll_2014_09_09_tokyo.pdf
04_protokoll_fsma_2014_09_16_tokyo.pdf
参照
1. rename command
2. Bulk renaming files in Ubuntu
3. rename
4. Perl 正規表現のクイックスタート (評価修飾子について)
5. Reguläre Ausdrücke (Modifeier について)
6. 関数 sprintf について
7. our $i; について