Linuxで複数のファイル名を一括変更(置換)する時には,”rename”というコマンドででファイル名の一括をすることが出来ます.ただし,OSによって少し使い方が違うので注意が必要です.
Ubuntu以外のLinuxの場合
Ubuntu以外のLinuxのOSでは,通常の”rename”の使い方で複数のファイルの名前を一括変更できます.一般的な使い方は
rename [変更したい部分,変更前] [変更後の名前] [対象ファイル(複数でもオッケー)]
となります.
例として,今いるディレクトリに”test1.txt”, “test2.txt”,…,”test9.txt”とファイルがあって,”test”という文字を”kakutei”という文字に変えたいとします.このときは,ターミナルでこのディレクトリまで移動して,次のコマンドを打てばいいです.
rename test kakutei test1.txt test2.txt ... test9.txt
“…”の部分は本当にドットを3つ打つのでなく,ただ省略という意味です.実際に使う際には,ワイルドカード(*)を使って次のようにするのが現実的でしょう.
rename test kakutei *.txt
Ubuntuの場合
LinuxのOSとしてUbuntuを選択している場合や,Windowsに”bash on Ubuntu on Windows”を入れていてrenameを使う場合には,他のLinuxのディストリビューションとはrenameの使い方が変わるみたいです.試しに,先ほどのrenameの使い方をUbuntuで試してみると次のようなエラーメッセージが吐かれます.
Bareword "[変更ワード]" not allowed while "strict subs" in use at (eval 1) line 1.
これは,Ubuntuのrenameの文法が通常のLinuxとは違うためであるそうです.2016年11月21日現在,Ubuntu 16.04LTSでもこの点は変わっていないことを確認しました.
[ubuntu] Unable to rename files in Terminal… – Ubuntu Forums
Ubuntuでの”rename”の基本的な使い方は
rename "s/[変更したい部分,変更前]/[変更後の名前]/;" [対象ファイル]
となります.ダブルクォテーション””は,シングルクォーテーション”に変えても同じく機能します.
先ほどと同じ例として,今いるディレクトリに”test1.txt”, “test2.txt”,…,”test9.txt”とファイルがあって,”test”という文字を”kakutei”という文字に変えたいとします.Ubuntuでこのような状況にいるときは,ターミナルでこのディレクトリまで移動して,次のコマンドを打てばいいです.
rename "s/test/kakutei/;" test1.txt test2.txt ... test9.txt
“…”の部分は本当にドットを3つ打つのでなく,ただ省略という意味です.Ubuntuでも同じく,ワイルドカード(*)を使って次のようにするのが現実的でしょう.
rename "s/test/kakutei/;" *.txt
拡張子の一括変更:少しひねるだけ
今までのを応用するだけです.”.txt”という拡張子のファイルをすべて”.data”という拡張子に変換したいときは,Ubuntuでは
rename "s/txt/data/;" *.txt
それ以外のLinux系のOSでは
rename txt data *.txt
とすればよいでしょう.