Perl 入門講座 [PRIVATE]

使用ディスク容量の表示

自分のサイトの各ディレクトリの使用容量とディレクトリ名/ファイル名の表示です。
このようなプログラムは、ISP(プロバイダ)によって提供されていると思われますが、使用容量を取得して、そこで得られた容量数字等から何かを独自に管理したい時には必要なスクリプトです。

実行画面


全ソース
#!/usr/local/bin/perl -w use strict; my $title; $title = "$0"; my $body; $body = '<BODY bgcolor="black" text="white" TOPMARGIN="10" LEFTMARGIN="10">'; sub header; sub process; sub footer; sub error; # Loop ---------------- &header($title, $body); &process; &footer; exit(0); #---------------------- sub process { my $dir = "../../"; # 2つ上のディレクトリを指定 # ディレクトリの指定(トップにしています) chdir $dir; # 各ディスク使用量とディレクトリ/ファイル名を配列に取得する # -k で『KB』キロバイト指定。-m で『MB』メガバイト指定 my @dum = (); @dum = `du -k`; # 容量の数字で大順にソート my @data = (); @data = sort { $b <=> $a } @dum; # 指定ディレクトリの総容量の取得 my $volume; my $dir_name; ($volume, $dir_name) = split (/\s/, $data[0]); # 3桁コンマ入れ $volume =~ s/(?<=\d)(?=(\d\d\d)+(?!\d))/,/g; print "全ディスク使用量は、<font color=yellow>$volume</font> KB です。<br>\n"; print "<br>\n"; print "上位20件<br>\n"; print "<table>\n"; print "<tr><td>ディスク使用量【KB】</td><td> </td><td>ディレクトリ名</td></tr>\n"; foreach (1 .. 20) { my $volume; my $dir_name; ($volume, $dir_name) = split (/\s/, $data[$_]); $volume =~ s/(?<=\d)(?=(\d\d\d)+(?!\d))/,/g; print "<tr><td align=right><font color=yellow>$volume</font></td><td> </td><td>$dir_name</td></tr>\n"; } print "</table>\n"; } #----------------------------------【html】--------------------------------------------- #---- HTMLヘッダー ---- sub header { my ($title, $body) = @_; print "Content-type: text/html\n\n"; print "<html><head>\n"; print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=x-sjis\">\n"; # print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=EUC-JP\">\n"; print "<title>$title</title>\n"; print "</head>\n"; print "$body\n"; } #------------------------ sub footer { print "</body></html>\n"; exit; } ## --- エラー処理 sub error { print "<center><hr width=75%><P><h3>ERROR !</h3>\n"; print "<P><font color=#dd0000><B>$_[0]</B></font>\n"; print "<P><hr width=75%></center>\n"; print "</body></html>\n"; exit(0); }
The first written on May 12, 04


更新日 Tuesday, 01-Jul-2008 21:15:42 JST
[1381]