renameコマンド : ファイル名一括変換

renameコマンド : ファイル名一括変換

1 renameコマンド

大量のファイルのファイル名を一括変換するコマンド「rename」を紹介します。

1.1 注意

一括で処理出来るということは非常に強力な反面、失敗した場合には被害が大きくなってしまいます。
コマンドがどのように動作するか、処理の指定にミスが無いか十分確認してから使う必要があります。
マニュアルや各種解説をしっかりと読み、始めのうちは失敗しても大丈夫なようにバックアップをしっかり取っておいてから作業するようにしましょう。

2 一つずつファイル名を変更する方法

単純にファイル名を変更する場合、コマンドラインでは
$ mv test.txt my-memory.txt
となります。またGUI環境ならファイルマネージャーの名前を変更する機能で簡単に行うことが出来ます。

ただ1つや2つのファイル程度ならそうやって手作業で変更していっても特に手間でもないのですが、変更したいファイルが大量にあるとそれも面倒になってきます。

例えば、デジタルカメラで写真を撮った時に以下のようなファイルが出来たとします。
  • 20170703-001.JPG
  • 20170703-002.JPG
  • 20170703-003.JPG
  • 20170703-004.JPG
ここで拡張子が大文字でJPGとなっているのを、小文字のjpgに直すことを考えてみます。
mvコマンドでは
$ mv 20170703-001.JPG 20170703-001.jpg
$ mv 20170703-002.JPG 20170703-002.jpg
$ mv 20170703-003.JPG 20170703-003.jpg
$ mv 20170703-004.JPG 20170703-004.jpg

と4回コマンドを実行する必要があります。また1回毎にファイル名の変更もしなければならないため、ファイルが多くなれば手間が積み重なっていきます。

3 renameコマンドの基本

renameコマンドはファイル名変更を一括で変更出来るため面倒な手間を減らすコトが出来ます。
ただ一括処理にはファイル名の指定にパターンマッチの知識が必要になってきます。このコマンドの場合はに正規表現(Perlで使われるperlexprという書式)を押さえておく必要があります。
書式に関してはsedコマンドの書き方が参考になるようです。

renameコマンドの簡単な使い方は以下の通りです。
$ rename 's/\.JPG/\.jpg/' * renameコマンドでは名前を変更したいファイルを指定するのにワイルドカードが使えます。
-nオプションを使えば、実際にはファイル名変更されず、指定した処理でどのように編集されるのかが画面上に出力されます。実際にrenameコマンドで処理を実行する前にはこのオプションを指定して確認するようにしましょう。

またファイル名に同じ文字列が含まれる場合、
例えば、test-test002-test003.txt
というファイルでは、testという文字を変更しようとすると、ファイル名の一番始めのtestだけが変更されます。全てのtestという文字を変更するといったことも出来ます。
またファイル名の先頭や末尾の指定など、いろいろ対応可能です。

パターンマッチの指定方法は覚えておくと他にも応用可能なので、簡単な使い方を押さえておくと知識の幅が広がっていくでしょう。

また処理前や処理後のファイル名確認にはlsやfindといったコマンドを使うのもいいかと思います。

5 参考資料



コメント