連載
» 2019年02月25日 05時00分 公開

Tech TIPS:WSLのrenameコマンドでファイル名を手軽に一括変換する

ファイル名のルールが変わったなどで、ファイル名をまとめて変換したいようなことはないだろうか。このような場合、エクスプローラーで手動により変更するのは大変だ。コマンドプロンプトのrenコマンドでは、拡張子を変えるような場合はいいのだが、ファイル名を柔軟に変更できない。このような場合はWSLのrenameコマンドを使うとよい。その方法を紹介する。

[小林章彦,デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象:Windows 10


 ファイル名のルールが変更になって、複数のファイルを一括で変換したいということはないだろうか? 例えば、abc01.jpg、abc02.jpg、……、abc90.jpgといったファイル名を、abc001.jpg、abc002.jpg、……、abc090.jpgといったように数字部分を3桁にしたいとか、「abc」の部分を「abc_xyz」にしたいとか、ということだ。

 このような場合、ファイル数が少なければ、エクスプローラーで順番にファイル名の変更を行えばよいが、数十、数百ともなると手間がかかる。こうした処理はコマンドプロンプトが得意のはずなのだが、ファイル名を一括で変更しようとするとうまくいかない(拡張子を変更する程度なら問題ないが)。

 PowerShellを使えば、ある程度、柔軟にファイル名を一括変換可能だが、PowerShellを使いこなすのはハードルが高いと感じている人も多いことだろう(PowerShellによるファイル名の一括変換については、Tech TIPS「Windows PowerShellを使って複雑なパターンのファイル名変更を行う」参照のこと)。

 実はWindows 10ならば、Linuxのプログラムを実行可能にする「WSL(Windows Subsystem for Linux)」をインストールすることで、Linuxの「rename」コマンドが利用できるようになるため、かなり柔軟なファイル名の一括変換などが行える。本TIPSでは、その方法を紹介しよう。

WSLをインストールしよう

 残念ながらデフォルトでは、WSLがインストールされていないので、Tech TIPS「Windows 10でLinuxプログラムを利用可能にするWSLをインストールする(バージョン1803以降対応版)」を参考にして、WSLをインストールしておく。WSLでは、複数のディストリビューションがサポートされているが、本TIPSでは当初からサポートされていたUbuntu環境で解説していく(ディストリビューションによってコマンドのオプションが異なるので注意)。

 インストール後は、「sudo apt update」と「sudo apt upgrade」コマンドを使ってシステムやパッケージを更新しておく。

renameコマンドをインストールする

 ファイル名の変更するrenameコマンドは、Ubuntuにデフォルトではインストールされていない。そこで、UbuntuをインストールしたらUbuntuを起動し、以下のコマンドを実行して、renameコマンドをインストールする(aptコマンドについては、Tech TIPS「WSLのUbuntu環境で「apt」コマンドを使ってパッケージを更新/管理する」参照のこと)。renameコマンドのインストールは、一度、行えばよいので、すでにインストールされている場合は、スキップしてよい。

sudo apt install rename

renameコマンドをインストールするコマンド

renameコマンドをインストールする renameコマンドをインストールする
WSLのUbuntuにはrenameコマンドがインストールされていない。初回のみ、renameコマンドのインストールを行う必要がある。

renameコマンドでファイル名を一括変換する

 renameコマンドをWSL上でそのまま使ってもよいが、ここではコマンドプロンプト上でLinuxのrenameコマンドを呼び出して使ってみる。WSLとWindows OSのパスの表記方法は少し異なっているので、コマンドプロンプトの扱いに慣れたユーザーなら、この方が簡単かもしれない。

 renameコマンドがインストールできたら、コマンドプロンプトを開く(コマンドプロンプトを素早く開く方法は、Tech TIPS「Windows 10でコマンドプロンプトを素早く起動する方法」を参照のこと)。

 ファイル名を変更したいフォルダにカレンドディレクトリを移動し、「wsl rename」コマンドを実行する。コマンドプロンプトでもLinuxコマンドの前に「wsl」と付けることで直接、実行することができる(Tech TIPS「Windows 10のコマンドプロンプトからWSL上のLinuxコマンドを呼び出す(バージョン1803対応版」参照のこと)。

 renameコマンドでファイル名の変換を行う場合、以下のようにパラメーターを指定する。

rename 's/<置換したい文字列>/<置換後の文字列>/' <対象ファイル>

Ubuntuのrenameコマンドによるファイル名変換のパラメーター
「s/〜/〜/」は“文字列”を置換するためのコマンド指定。他に、“文字”を置換する「y/〜/〜/」というコマンドもある(例:「y/a-z/A-Z/」なら小文字を大文字に変換する)。これはPerl言語の表記に基づいている。

 Ubuntuのrenameコマンドは、正規表現で置換する文字列を指定できるので、柔軟なファイル名の一括変換が可能だ。また、対象ファイルは任意の文字列を「*(アスタリスク)」で、任意の一文字を「?(疑問符)」でマッチさせるワイルドカードが利用できる。これを使って、特定の拡張子のファイル名のみを一括で変換させることも可能だ(対象ファイルとして「*.png」などと指定する)。

 例えば、フォルダ内のPNGファイルのファイル名を「abc」から「abc_xyz」に変更したいのであれば、以下のコマンドを実行すればよい。

wsl rename 's/abc/abc_xyz/' *.png

コマンドプロンプトでrenameコマンドを使ってファイル名を変更する

renameコマンドでファイル名を一括変換する(1) renameコマンドでファイル名を一括変換する(1)
abc01.png、……、abc90.pngのファイル名を一括で変換してみる。
renameコマンドでファイル名を一括変換する(2) renameコマンドでファイル名を一括変換する(2)
renameコマンドを使うと簡単にファイル名が一括変換できる。正規表現を使って置換文字列を指定できるので、複雑な条件でも柔軟にファイル名が一括変換できる。

 なお、変換したファイル名を戻すことはできないので、変換ミスなどをした場合でも困らないように、フォルダごとコピーしてからファイル名を一括変換して、元のフォルダを削除するなどするとよい。

 上記のパラメーターはUbuntuの場合だが、renameコマンドはディストリビューションによって以下のようにパラメーターを指定するものもある。Ubuntuとはパラメーターの構成が異なっているので注意したい。

rename <置換したい文字列> <置換後の文字列> <対象ファイル>

他のディストリビューションのrenameコマンドによるファイル名変換のパラメーター

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。