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)