Linuxで複数のファイル名を一括変更(置換)する

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

とすればよいでしょう.

このブログについて

IAtLeX です.ブログをはじめてさほど時間がたっていないので,未熟な内容が多々あるかと思いますが,それも時間が解決してくれるはず...Python系の記事を着々と充実させていきたいです.投稿主についてはこちらを参照してください.

このブログについて - http://iatlex.com/about_blog/

コメントを残す

*