[Linux Shell] bashとsedを使ってファイルの拡張子を一括置換する
hoge.htmとかimage.JPGとかをhoge.htmlやimage.jpgなどと、拡張子だけを一括変更する方法。
ファイルの数が少ない場合は普通にmvすればいいのだが、ディレクトリごと一斉置換したい場合は以下のようにする:
例:*.htmを*.htmlに置換する
基本的にsedの/htm/html/g箇所をいじればどんな置換にも対応できる。
なのだが、いつもこんな長いコマンドを打ち込むのはめんどうなので、スクリプトにまとめておくと便利。
例えばこんな感じ:
これをパスの通った場所に適当な名前を保存しておく。今回はmv しながらsedをするので、mvsedという名前を付けてみた。
忘れずに実行権限をつけておく
使用方法は
mvsed ファイル名 現在の拡張子 置換後の拡張子
本当は拡張子だけでなく、ファイル名全体の置換につかえるのだが、今回の趣旨の都合上、拡張子ということにしておいてください ^^;
で、使用方法。
ファイル1個:
-> hoge.htm を hoge.htmlに変更
一括置換:
-> ディレクトリ内の.htmファイルをすべて.htmlに変更する。
いまどき*.htmもあんまり見かけなくなったけど、その辺は気にしなーい。
関連エントリー:ファイル名のスペースをアンダースコアに変換する方法
ファイルの数が少ない場合は普通にmvすればいいのだが、ディレクトリごと一斉置換したい場合は以下のようにする:
例:*.htmを*.htmlに置換する
# for f in *.htm; do mv $f `echo $f|sed -e "s/htm/html/g"`; done
基本的にsedの/htm/html/g箇所をいじればどんな置換にも対応できる。
なのだが、いつもこんな長いコマンドを打ち込むのはめんどうなので、スクリプトにまとめておくと便利。
例えばこんな感じ:
#!/bin/sh
mv $1 `echo $1|sed -e "s/$2/$3/g"`
これをパスの通った場所に適当な名前を保存しておく。今回はmv しながらsedをするので、mvsedという名前を付けてみた。
忘れずに実行権限をつけておく
$ chmod +x mvsed
使用方法は
mvsed ファイル名 現在の拡張子 置換後の拡張子
本当は拡張子だけでなく、ファイル名全体の置換につかえるのだが、今回の趣旨の都合上、拡張子ということにしておいてください ^^;
で、使用方法。
ファイル1個:
$ mvsed hoge.htm htm html
-> hoge.htm を hoge.htmlに変更
一括置換:
$ for f in *.htm; do mvsed $f htm html;done
-> ディレクトリ内の.htmファイルをすべて.htmlに変更する。
いまどき*.htmもあんまり見かけなくなったけど、その辺は気にしなーい。
関連エントリー:ファイル名のスペースをアンダースコアに変換する方法
コメント
for fn in *.htm; do mv $fn ${fn/.htm/.html}; done
で可能かな