対象とするUbuntuのバージョン
- すべて
複数のファイル名を一括して変更する、「renameコマンド」 の使用例を示します。
UNIXにこのコマンドがないこともあって余り知られていませんが、どのLinuxにも含まれています。
基本的な使用法と特徴
書式: rename [ -option ] perlexpr [ files ]
- perlexpr: ファイル名変更の仕方を「Perl言語」で表記する。 具体的には、 ' s / from / to / ' とか ' y / from / to / ' である。
- ( 「manページ」からの抜粋を改変 )
特徴:
- ファイル名に空白(スペース)が含まれていても変更できる。
- 変更の前後で名前の長さが変わってもよい。
- 「sedコマンド」と殆ど同じように記述でき、非常にelegantに変更可能。従って、正規表現により広範な応用ができる。
- 名前を変更する「標的ファイル」は「 * 」でも、拡張子をつけて「 *.aaa 」でもよいし、ディレクトリを指定して「 / dir / * 」などとしてもよい。
具体的な使用例
最初に、「TEMPEST : Linuxでファイル名をまとめて変更する」 に書かれたファイル名変更の方法と、 「renameコマンド」 の方法を比較してみます。
(例1) 全てのファイル名に拡張子「.txt」を付ける。
$ for file in *; do mv -i $file `echo $file | sed 's/$/.txt/'`; done -----> $ rename 's/$/.txt/' *
以下、上の記事の方は省略しますので、そちらをご覧下さい。
(例2) 拡張子 .htm を.html に変更する
$ rename 's/.htm/.html/' *.htm
(例3) 拡張子 .htm を削除する
$ rename 's/.htm//' *.htm
(例4) 先頭に文字「20070610-」を加える
$ rename 's/^/20070610-/' *
(例5) 上の2007を2008に変更する
$ rename 's/2007/2008/' *
次に、web上の他の例を「renameコマンド」で書き換えてみます。
(例6) ファイル名を全部小文字に変更する
$ for file in *; do mv "$file" `echo $file | tr '[A-Z]' '[a-z]'`; done -----> $ rename 'y/A-Z/a-z/' * または $ rename 'tr/A-Z/a-z/' *
originalの例
次の様なmp3ファイルに対し、以下の2つの変更をしたい。
Brian Kelly - Cool Blue (www-briankelly-com).mp3 Doug Wisler - Serenity Shores (www-dougwisler-com).mp3
(例7) 「 ( url )」を削除する。
$ rename 's/ \(\S*\)//' *.mp3
(例8) 演奏者のファーストネームをイニシャル化する。
$ rename 's/^?[a-z]* /\. /' *.mp3