元IT技術者の悪あがき

20年以上の熟成と味わい😊

【お知らせ】当ブログはアフィリエイト広告を掲載しています。

【 広 告 】

【備忘メモ】Linuxのツールでファイル名の拡張子を大文字から小文字に変換

Debian系Linuxで、ファイルの拡張子を大文字から小文字に変換したかったので、手順を探そうとGoogle検索してみたけど、ファイル全体の変換ばかりヒットする。

このため、断片的な情報を混ぜ合わせて、自力で解決してみた。

なお、先に書いておくけど、本記事では「rename」というツールを使用する。(標準コマンドではない。)


【目次】


試した環境

  • WSL(Windows Subsystem for Linux)内のDebian GNU/Linux、バージョン13 (trixie)

ファイル名の置換を行うための前準備

普通にファイル名の変換を行うだけなら、mvを使うのが手っ取り早い。

$ mv example.JPG example.jpg

ただ、ファイルが1つだけなら良いけど、何十・何百と大量にある場合は、手作業でのリネームは効率が悪すぎるし、現実的ではない。

このため当記事では、ファイル名の置換に「rename」というツールの力を借りることにした。

「rename」は、Debianの初期状態ではインストールされていないと思うので、Debianのパッケージ管理ツール「apt」を使ってインストールを行う。

$ apt show rename #このコマンドは省略しても可
Package: rename
Version: 2.02-1
Priority: optional
Section: perl
Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
Installed-Size: 66.6 kB
Depends: perl:any
Homepage: https://metacpan.org/release/File-Rename
Download-Size: 21.8 kB
APT-Manual-Installed: yes
APT-Sources: http://deb.debian.org/debian trixie/main amd64 Packages
Description: Perl extension for renaming multiple files
 This package provides both a perl interface for renaming files (File::Rename)
 and a command line tool 'file-rename' which is intended to replace the version
 that used to be supplied by the perl package.

$sudo apt install rename
~~~(以下、省略)~~~

ちなみに「rename」という外部プログラムではなく、実体はPerlの機能拡張ライブラリらしい。

動作にはPerlが必要だけど、なければaptが依存関係を解決しようと、一緒にインストールしてくれると思う。

「rename」を試してみる

まずは、適当に削除しても問題ないファイルを用意して、コマンドを試してみる。

ちなみにファイル検索と置換には、正規表現を使っている。

なお正規表現の詳細について触れると、記事が丸々1本出来上がるので、本記事では割愛。

$ rename -n 's/(.+\.)JPG/\1jpg/' *.JPG

オプション類の解説については、次の通り。

-n
No action。Dry runとも言い、実際の変換は行わない。テスト実行。
's/(.+\.)JPG/\1jpg/'
ざっくり説明すると、正規表現でピリオドより前はそのまま使って、ピリオドより後ろをjpgに置き換えている。カッコ()で囲んだ部分を\1で参照しているイメージ。詳細は割愛。
*.JPG
申し訳ない。ここは単純に手抜き。Linuxが大文字・小文字を識別する点を利用して「*.JPG」という大文字のファイルを指定してるだけ。

エラーがなければ、リネームの実行結果が表示される、という次第。

# rename(置換前, 置換後)
rename(example.JPG, example.jpg)

本実行

テスト結果を確認して、問題がなければ、「-n」オプションを外して本実行する。

$ rename 's/(.+\.)JPG/\1jpg/' *.JPG
$

Linuxコマンドっぽく、実行結果が正常終了すれば、何も表示されずプロンプト入力に戻る。

lsなどで結果を確認して終了。

逆に異常終了すれば、エラーメッセージが表示される。

試しに、わざと間違った構文を書いてみた結果が、次の通り。

$ rename -n 's/(.+\.)JPG/\1jpg//' *.JPG
syntax error at line 2, at EOF
Execution of (eval 25) aborted due to compilation errors, in:
s/(.+\.)JPG/\1jpg//

「syntax error」(構文エラー)と表示された。

改良案

大文字で記された色んな拡張子に対応するなら、次に記す案もあり。

$ rename -n 's/(.+\.)([A-Z]{3})$/\1\L\2\E/' ./*.*

一応解説すると、拡張子3文字が全て大文字だった場合、2つめの後方参照「\2」を「\L」と「\E」で囲って全て小文字に置換している、という意味になる。

正規表現の後方参照で大文字・小文字変換するエスケープシーケンスに関しては、先ほど、こちらの記事 で見かけて知った次第。感謝。

あとがき

先日、何かの折に実行したのだけど、今日、すっかり忘れていたので、ブログに備忘メモとして、記事を書いてみた。

あくまでも備忘メモなので、正規表現を中心に、色々と割愛してる。

ただ、オプションなどの意味を知らずに使うと、あとで手痛いしっぺ返しを食らうので、この記事に辿り着いた方々には「ちゃんと理解して、試した上でオプションを使うこと」と伝えたい。

そんな訳で、分からない部分は個別で調べて頂ければと思う。

では。


【追記】

参考までに、正規表現に関する書籍のアフィリエイト広告を掲載。

改良案で触れた、正規表現による大文字・小文字置換についても記述あり。

なお、書籍は2018年発売で、2026年2月時点で電子書籍のみ取り扱ってる模様。

正規表現は何十年と言う歴史があり、基本的な考えや活用法は変わらないので、発行年が多少古くても問題なく読める。

【広告】