大量ファイルを一括リネーム pyrename

LINEで送る
Pocket

ドキュメント、画像、動画フォルダーに保存しておいたファイルは、放って置くと整理しきれなくなります。
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 : 置換文字列を「式」と見なす

LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください