ドキュメント、画像、動画フォルダーに保存しておいたファイルは、放って置くと整理しきれなくなります。
rename は、ファイル名の一括置換を行ってくれるツールです。
jpeg, JPG, jpg などカメラによって拡張子や大文字、小文字だったりと事なる場合に拡張子を統一させたり、 ファイル名のナンバリングなど簡単に置換してくれるのでファイル整理に役立ちます。
renameは、次のコマンドを実行するとインストールできます。
$ sudo apt install rename
画像ファイルの拡張子が jpg,jpeg,JPG,JPEGと複数存在します。
$ ls
test1.jpg test2.jpeg test3.JPG test4.JPEG
拡張子 .jpeg .JPG .JPEG を .jpg に変換します。 -n オプションを付けると、どのようにrenameされるのか事前確認出来ます。
置換演算子は、s/パターン/置換文字列/ と記述します。
$ rename -n 's/\.(jpeg|JPG|JPEG)/\.jpg/' *
rename(test2.jpeg, test2.jpg)
rename(test3.JPG, test3.jpg)
rename(test4.JPEG, test4.jpg)
-v オプションを付けると、どのようにrenameされたのか表示される。
$ rename -v 's/\.(jpeg|JPG|JPEG)/\.jpg/' *
test2.jpeg renamed as test2.jpg
test3.JPG renamed as test3.jpg
test4.JPEG renamed as test4.jpg
変更されたファイルを確認する。
$ ls
test1.jpg test2.jpg test3.jpg test4.jpg
rename の文字列変換の正規表現は、perlの正規表現を使いますが、perlのコードも書けるので、 perl言語が分かれば、以下のように少し難しい書式を書き、タイムスタンプの古いファイルから 昇順にナンバリングを行い、日付を付加することもできます。
$ ls -l
合計 0
-rw-rw-r-- 1 taro taro 3438243 5月 8 21:11 test1.jpg
-rw-rw-r-- 1 taro taro 3900155 5月 8 21:15 test2.jpeg
-rw-rw-r-- 1 taro taro 3725469 5月 8 21:16 test3.JPG
-rw-rw-r-- 1 taro taro 2273411 5月 8 21:17 test4.JPEG
"ls -1t" コマンドでファイルを時間でソートします。
$nowdate にdateコマンドで今日の日付を設定し、chomp関数で改行コードを削除します。
ナンバリング用のカウンター$iは、ファイル毎に使いましカウントアップさせるのでourでグローバル宣言します。
sprintfでファイル名を整形します。最後の "e" は、置換演算子の修飾子です。
$ ls -1t | rename -v 's/.*/my $nowdate=`date +'%Y%m%d'`; chomp($nowdate); our $i;if(!$i){$i=1;} sprintf("旅行_%s_%04d.jpg", $nowdate, $i++)/e'
Reading filenames from file handle (GLOB(0x16e1ae0))
test1.jpg renamed as 旅行_20180508_0001.jpg
test2.jpeg renamed as 旅行_20180508_0002.jpg
test3.JPG renamed as 旅行_20180508_0003.jpg
test4.JPEG renamed as 旅行_20180508_0004.jpg
$ ls -l
合計 0
-rw-rw-r-- 1 taro taro 3438243 5月 8 21:11 旅行_20180508_0001.jpg
-rw-rw-r-- 1 taro taro 3900155 5月 8 21:15 旅行_20180508_0002.jpg
-rw-rw-r-- 1 taro taro 3725469 5月 8 21:16 旅行_20180508_0003.jpg
-rw-rw-r-- 1 taro taro 2273411 5月 8 21:17 旅行_20180508_0004.jpg
置換演算子の修飾子
g : 繰り返しマッチする
i : 大文字と小文字の区別をしない
e : 置換文字列を「式」と見なす