Module: Rex::Find

Defined in:
lib/rex/file.rb

Class Method Summary collapse

Class Method Details

.find(*paths) ⇒ Object

Identical to Find.find from Ruby, but follows symlinks to directories. See blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/68671



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/rex/file.rb', line 76

def self.find(*paths)
  paths.collect!{|d| d.dup}
  while file = paths.shift
    catch(:prune) do
      yield file.dup.taint
      next unless File.exist? file
      begin
        if File.stat(file).directory? then
          d = Dir.open(file)
          begin
            for f in d
              next if f == "." or f == ".."
              if File::ALT_SEPARATOR and file =~ /^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then
                f = file + f
              elsif file == "/" then
                f = "/" + f
              else
                f = File.join(file, f)
              end
              paths.unshift f.untaint
            end
          ensure
            d.close
          end
        end
      rescue Errno::ENOENT, Errno::EACCES
      end
    end
  end
end

.pruneObject



107
108
109
# File 'lib/rex/file.rb', line 107

def self.prune
  throw :prune
end