うろこ新聞 2004年2月16日号第2面(ハードディスク供養、LDT10)
先日転がっていた古いハードディスクをテストして、やはり使えないので、分解してみた。こうやって見るとなにか痛々しい。なぜかというと、ものすごく精密にできている表面が剥き出しになっているからである。これは何か再利用できるのではないかと思ってみたりする。
でも仕方がない、塩を振ってお祓いをして、神棚にちょっと置いてから、燃えないゴミに出した。
LinuxデスクトップTips その10
●小さなツール(a)
LinuxOS上で、下のふたつのスクリプトを実行すると、100ファイルでも1000ファイルでもすぐShift-JISからEUC-JPのコードに改行もふくめて変換できる。これをふたつまとめて、ひとつのシェルスクリプト(Windowsのバッチファイルのようなもの)にしてもいい。
まず適当な名前で作業するディレクトリを作り、その中にディレクトリ「kojo」を作成して、「kojo」に変換したいファイルを全部コピーする。作業するディレクトリで、
$perl dir.pl
を実行すると「kojo」ディレクトリにあるファイル名一行ずつかかれたファイル「dir.dat」が生成される。
さらに、
$perl henkan.pl
とすると作業ディレクトリに同じ名前のEUC-JPコードに変換されたファイルがすぐできあがる。(注意:実行してうまくいきましたが、なにか問題があったら教えてください)
--------------------------------------
#dir.pl
$dir = './kojo';
opendir DIR, "$dir";
open OUT, ">dir.dat";
@alldir = grep( !/^\.+/, readdir DIR);
close DIR;
foreach (@alldir) {
print OUT $_,"\n";}
《Perl語から日本語への翻訳
まず、このディレクトリ(フォルダ)の中にあるディレクトリ「kojo」を「$dir」としますね。
それでもって、そのディレクトリの中を開いて、「DIR」というハンドルをつけていじることにします。
さらに、結果を記入するファイルを作っておきましょうね。それを「dir.dat」という名にします。これにも「OUT」というハンドルをつけますね。それはいまこのプログラムを実行するフォルダ内に作ります。
さて本題です。
DIRの中身を読んでみます。ファイル名がいろいろあるはずです。そうそう、始めが「.」とそれが続くファイル名をもつものでない(!)ものを探します。そのたくさんのファイル名全体を「配列」ととらえ、「@alldir」という名前にしましょう。「配列」の区切りは「改行コード」で、それで区切られたものが1つずつの要素です。
もうDIRの中身は開けて「@alldir」という配列として格納しちゃったので、DIRは閉じちゃいます。
さてさて、「@alldir」のそれぞれの(foreach)要素について、OUTに書き込んでいきましょう。それぞれの要素(ここではファイル名)の後に改行コードを1ついれましょうね(\n)。
さあ、これでできましたよ。ファイル名「.」「..」を除いたいろんなファイルの名前が、改行されて「dir.dat」という名のファイルに収納されました。》
--------------------------------------
#henkan.pl
open IN, "dir.dat";
@hen = <IN>;
foreach $hen(@hen){
@new = `nkf -eLu \./kojo/$hen`;
open OUT, ">$hen";
print OUT @new;
}
《Perl語から日本語への翻訳
では、さっきの「dir.dat」というファイルを開けて「IN」というハンドルでいじりましょう。
中身を「改行コード」で区切った「配列」ととらえて、つまり各行を1要素ととらえて、「@hen」という配列名をつけましょう。そうそう区切りは何にするか替えられるんですよ。でも何も指定しなければ「改行コード」が区切り子(デリミタ)になるんです。今度はINは閉じません。実はこのプログラムが終わると自動的に閉じるんですよね。几帳面な人は上のようにちゃんと閉じておきます。
さっきと同じようにそれぞれ(foreach)の要素について処理します。この場合各要素を「$hen」としますね。「@hen」という配列の1要素を$henとします。さて、ここでシステムが備えている、命令語を使っちゃいましょう。そういう場合逆コーテーションマーク(バッククオート)を使います。このディレクトリ(フォルダ)の下の「kojo」という名のディレクトリ(フォルダ)の中のファイル名はあたりまえですが、@henの中に格納された1要素ですよね。「nkf -eLu」っていうのは、ファイルの中身をEUC-JPに変換してしかも改行コードをEUC-JP形式にするってことです。
それぞれの要素にその命令をして変換しちゃいます。それでもって、その変換したものを「改行コード」で区切った「配列」として「@new」って名前にします。
さてさて、またさっきと同じようにOUTというハンドルのついた「$hen」という名前のファイルに書き込みましょう。この「$hen」は各ファイル名が代入されますので、同じ名前になってファイルができますよ。それもしかも、このディレクトリ(フォルダ)にできます。下と同じ名前のファイルが全部EUC-JPに改行コードもふくめて変換されてこのフォルダに収納されて、できあがりです! 1つのファイルでも1千個のファイルでもたちまちできちゃいます》

|