32nd Diary

トップ | 最新 | 過去の日記 | もっと過去の日記

2003年
8月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
めーるあどれす
ruby -rbase64 -e'puts Base64.decode64 %q(dGFrYW5vMzJAZ21haWwuY29t)'



2003-08-18 (Monday) [長年日記]

[UNIX] りねーむ。

今日はリネームの話題。

MS-DOSでは

move *.htm *.html

とかいうリネーム方法がありますが、bashなどで

mv *.htm *.html

としてもリネームはされません。

そもそもシェルのワイルドカードの展開がMS-DOSの様に人に優しくない。

んで、そういう感じのリネームなどをするときに32が使ってる方法(たぶんUNIXユーザーは結構使ってる方法。)についてです。@UNIX

ちなみに「たかがリネームでしょ?」とか思ってたら考えを改めたほうがよいかもしれません。(ぉ

個人的にリネームにはシェルスクリプトを学習するエッセンスが含まれていると思っていたり。

では早速具体的な話へ。*.htmを*.htmlにリネームします。

とりあえずは、シェルがどういったものだったかを思い出すために

for i in *.htm;do echo $i;done

などと打つ。そうすると

hoge.htm

fuga.htm

のように列挙されるはず。

これをmv hoge.htm hoge.htmlなどに変えてやればいい。

で。早速進行上のミスが(w

さっきのことは忘れて

ls *.htm|more

と打っても同じ出力がでるはずです。こっちでいきましょう(ぉぃぉぃ

ls * | sed "s/\(.*\)\.htm$/& \1/"

としてみましょう。正規表現によってMS-DOS風には*.htmと表現されるものにマッチした部分について置換を行います。(詳しくは上の正規表現を解釈してください。)

hoge.htm hoge

fuga.htm fuga

と表示されるはずです。&はhoge.htmに\1はhogeに置換されたわけです。

んで。mv hoge.htm hogeにするために

ls * | sed "s/\(.*\)\.htm$/mv & \1\.html/"

を実行してみると

mv fuga.htm fuga.html

mv hoge.htm hoge.html

最終目的のコマンド文字列が得られます。

これをbashに喰わせて終了。

ls * | sed "s/\(.*\)\.htm$/mv & \1\.html/" | bash

| bashってのはなんだかな〜って方は

| while read f;do $f;done

などとしてあげたりするのもいいかもしれません。

最後に。basenameがあるシステムではもっと簡単になります。(sed使わなくていいし。)

[Moe] どこぞで見かけたんですが。

最近、こういうの増えてるよね。

いや。別に何も批判的な目で見てるわけではないんですが、肯定的な立場でもないです。ハイ。

とりあえず、コミックマーケット準備会主催らしいので、ストライクゾーン間違いなしな感じはすますガナー。

本日のPingbacks(全0件)