ディレクトリ配下のファイルを探索するためのモジュールです。
require "find"
Find.find('/foo','/bar') {|f| ...}
または
require "find"
include Find
find('/foo','/bar') {|f| ...}
以下は、ruby のアーカイブに含まれるサンプルスクリプト [ruby-src:sample/trojan.rb] をこのモジュールで書き換えたものです。
#! /usr/bin/env ruby
require "find"
# 他人が書き込み可能な危険なコマンドを探す
for dir in ENV['PATH'].split(File::PATH_SEPARATOR)
Find::find(dir) do |fpath|
if File.file?(fpath) and (File.stat(fpath).mode & 022) != 0
printf("file %s is writable from other users\n", fpath)
end
end
end
Find.find(dir[, ...]) {|file| }find(1)のようにdir配下のすべてのファイルや ディレクトリを一つずつ引数fileに渡してブロックを実行します。 file に渡される順序は不定です。
あるディレクトリ配下の探索を省略したい場合
require 'find'
Find.find('/tmp') {|f|
Find.prune if f == "/tmp/bar"
...
}
のように、Find.pruneを使用します。この例では "/tmp/bar"
配下のファイルやディレクトリを探索しません。prune の代わりに
next を使用した場合、"/tmp/bar" 自体をスキップする
だけで、その配下の探索は続行されます.
Find.pruneFind.findメソッドのブロックにディレクトリが渡されたときにこ のメソッドを実行すると、そのディレクトリ配下の探索を無視します。
ディレクトリのシンボリックリンクを辿らなくなりました。