ディレクトリの中を子ディレクトリ内も含め全て出力

| コメント(0) | トラックバック(0)
おそらくこんなことするモジュールとかあると思うんだけど、簡単そうなので自力で。

ただしperl5.6以降限定。

----------------------------------------------------------------------------------------------
use strict;

my $target_dir = './dir';

print "Content-type: text/plain\n\n";
&read_all($target_dir);

sub read_all{
 my ($dir) = @_;
 opendir(my $dh,$dir)|| die "Directory open error :$dir";
  print '__DIR_'.$dir.'_START__'."\n";
  while(my $doc = readdir($dh)){
   if($doc !~ /^\.+$/){
    if(-d "$dir/$doc"){
     &read_all("$dir/$doc"); ##ループ
    }
    elsif(-e "$dir/$doc" && $doc =~ /^[\d\w]+\.[\d\w]+$/){ ##ここの正規表現はお好きなように
     open(FILE,"$dir/$doc") || die "File open error :$dir/$doc";
      print '__FILE_'.$doc.'_START__'."\n";
      while(<FILE>){
       print $_;
      }
      print '__FILE_'.$doc.'_END__'."\n".;
     close(FILE);
    }
   }
   else{
    next;
   }
  }
  print '__DIR_'.$dir.'_END__'."\n";
 closedir($dh);
}

exit;

-----------------------------------------------------------------------------------------

※perl5.6以降だと、ループの度にディレクトリハンドル(上で言う$dh)を自動生成してくれる。そうじゃないと一回目でclosedirされて多分ループが続かない。
※ヘッダ出力はお好きなように。
※使い道・・・・・多分ほとんどない。
 ダウンロードしたりLWP転送するときも、tar.gzとかzipにして一発出力したほうが手っ取り早いから・・・
 圧縮展開が面倒くさくて、ファイルも少量のときくらいはこれでやってもいいと思うけど。

トラックバック(0)

トラックバックURL: http://www.igreks.jp/blog/mt-tb.cgi/376

コメントする

このブログ記事について

このページは、管理人が2009年11月14日 12:49に書いたブログ記事です。

ひとつ前のブログ記事は「HTML(XHTML)のreadonly属性とdisabled属性の違い」です。

次のブログ記事は「perl2exeに四苦八苦」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.22-ja