« rubyで複数ファイルの文字列置換 | トップページ | linuxの.vimの設定 »

2008年2月 8日 (金)

複数ファイルのファイル名変更

昨日は複数ファイル中の文字列の置き換えを行いましたが、今回は複数ファイルのファイル名自体の変更を行う方法についてです。
例えば、デジカメで撮った写真のファイル名は、日時+連番.jpgなどの無機質なファイル名になってしまいますが、ファイル名の先頭に誕生会や熱海旅行などの文字列を追加したい場合、いちいちひとつずつファイル名を変換していくのは面倒です。
そういった場合は、私は下記のようにします。

1.  find . -name -type -f > rename.sh
カレントディレクトリ配下のファイル一覧を取得
別にコマンドはなんでもいいが、とにかく変換したいファイルの一覧をファイルに書き出す。

2. rename.shの内容を自分の好みのエディタでmvコマンドになるように編集。
vimの場合、ファイル名の先頭に運動会という文字列をつけたい場合は、
%s/\(.*\)/mv \1 運動会\1/
とすれば、
mv 20080210_001.jpg 運動会20080210_001.jpg
mv 20080210_002.jpg 運動会20080210_002.jpg
のようなシェルスクリプトが作成できる。
別に置換を行わなくても、単にコピペや編集だけでも大幅に手間が減る。

3. sh rename.sh
後は単純にできあがったシェルスクリプトを実行するだけだ。

私は8年ぐらいIT業界にいるが、こんな単純なことに気づいたのは、ここ1年ぐらいだ。
それまで、vimのディレクトリエディタのスクリプトであるexplorer.vimを直接ファイル名を書き変えられるようにスクリプトを改造するなど手間暇かけてまわりくどいことをしていた。おまけにその場合カレントディレクトリしかファイル名の変換対象にならないし。きっかけはvim7になって、explorer.vimが使われなくなったせいで、今までのように単にスクリプトファイルを置き換えるだけではいかなくなり、どうしたもんかと悩んているときに、あっとひらめいた。
コマンドつなげるにはパイプっていう固定概念がこんなことさえ気づかなくしていた。

|

« rubyで複数ファイルの文字列置換 | トップページ | linuxの.vimの設定 »

Linux」カテゴリの記事

コメント

以前一度コメントしたはずが反映されてないようなのでもう一度。

コマンドラインで
for i in *.jpg; do mv {,運動会}$i; done
とすれば同じ事が一行でできます
(for文とかブレース展開とかはbashの標準機能です)。

投稿: ktgw | 2009年10月 6日 (火) 00時15分

ktgwさん、情報有難うございます。
私が記事の手順で気にいっているのは、
一律に変換するだけでなく、好きな
エディタを使って、簡単に複数ファイル
のファイル名が変換できる点です。
また、findの引数により、対象ファイルを
カレントディレクトリだけでなく、直近
に作成されたものを対象にすることができ、
また、実行したシェルスクリプトのファイル
が履歴となり、元に戻すのも容易な点です。
欠点はWindowsだと、cygwinをインストール
する必要がある点です。

投稿: takeshy | 2009年10月11日 (日) 07時42分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/68673/40049179

この記事へのトラックバック一覧です: 複数ファイルのファイル名変更:

« rubyで複数ファイルの文字列置換 | トップページ | linuxの.vimの設定 »