From: Kikutani Makoto <kikutani / debian.or.jp>
Subject: [ruby-list:7622] dir search
Date: Sat, 18 Apr 1998 12:27:04 +0900

> 「あるサイズ以上のファイルを探す」というのをやりたくて、
> 
> $min = ARGV[0].to_i
> def look(path)
>   Dir.foreach(path){|f|
>     if FileTest.directory?(f)
>       unless f == '.' or f == '..'
>         look(Dir.pwd + "/" + f)
>       end
>     else
>       fn = path + "/" + f
>       if FileTest.file?(fn)
>         size = File.size(fn)
>         printf("%8d %s\n", size/1024, fn) if size > $min * 1024
>       end
>     end
>   }
> end
> look(".")
> 
> なんてのを書いたのですが(非Unix環境のためfindを使わないということで)、
> 階層が深くなるとファイルをオープンしすぎてエラーですね。
> これは再帰を使わなければいいような気もしますが。

これはスクリプトにバグがあるせいだと思います。

chdir を使うようにするか、または Dir.foreach のイテレータの先頭部分に 
fn = path + "/" + f を移動しておいて、 FileTest.directory?(fn)とし、再
帰呼出しの引数もfnにするとかすれば動くと思います。

ディレクトリ階層が深すぎて Too many open files になる可能性はなくはな
いですが、現実的にはまずない事で、気にする必要は感じません。

# UNIX(それも最近の)しか知らないので、気にしなければいけない環境がある
# のだとしたら教えてください。

From: Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp>
Subject: [ruby-list:7623] Re: dir search
Date: Sat, 18 Apr 1998 15:08:53 +0900

> lib に石塚さんの find.rb があって、それはその辺のところが
> 考慮されています。

確かにfind.rbを見ると再帰を使わないようになってますけど、別の目的があっ
てそうしているのではないでしょうか?
--
			   稲葉 浩人 (inaba / st.rim.or.jp)