ファイル名の拡張子以外の部分を切り取る1

 このエントリから流れで、拡張子が.JPGのファイルを.jpgにリネームしなおすための簡単なperlスクリプトを書こうとしています。

 前のエントリでglobを使ってディレクトリ一覧を取得するところまでいきました。その前のエントリでリネームのやり方もわかっていますので、これで望みのスクリプトが書けるのかと思っていましたが、良く考えると、ことはそう簡単ではないようです。

 私の思いでは、このスクリプトではファイルのリネームを

rename "file.JPG","file.jpg";

 という形式で行います。ファイル名そのものは変えず、拡張子のみを変更したいのですから当然ですね。ですが、ここに問題があるのです。

 globで取得するディレクトリ一覧では、ファイル名は"file.JPG"というカタチで取得されます。別に問題は無いように思えますが、よく考えると、変更前のファイルパスと変更後のファイルパスで、ファイル名自体は変えず、拡張子だけを変えたいのですから、拡張子が変数に入っていてはうまくありません。あくまで欲しいのは"file"の部分だけなのです。

 では、どうすればいいのかという話ですが、やり方はきっといくつもあるのだと思います。私は正規表現を使うやり方と、".(ドット)"を区切りとしてsplitで区切る方法を考えました。

 おそらく正規表現はsplitに比べてかなり処理が重くなると思いますが、ディレクトリ一覧に含まれているファイルが全て画像ファイルであるとは限らないことを考えると、正規表現のほうが相応しい気がします。splitでは拡張子による振り分けの処理を別途、考えなくてはなりませんからね。

 ということで次は正規表現について調べます。