Module Find
In: lib/find.rb

The Find module supports the top-down traversal of a set of file paths.

For example, to total the size of all files under your home directory, ignoring anything in a "dot" directory (e.g. $HOME/.ssh):

  require 'find'

  total_size = 0

  Find.find(ENV["HOME"]) do |path|
    if FileTest.directory?(path)
      if File.basename(path)[0] == ?.
        Find.prune       # Don't look any further into this directory.
      else
        next
      end
    else
      total_size += FileTest.size(path)
    end
  end

Methods

find   prune  

Public Instance methods

Calls the associated block with the name of every file and directory listed as arguments, then recursively on their subdirectories, and so on.

See the Find module documentation for an example.

[Source]

    # File lib/find.rb, line 35
35:   def find(*paths) # :yield: path
36:     paths.collect!{|d| d.dup}
37:     while file = paths.shift
38:       catch(:prune) do
39:         yield file.dup.taint
40:         next unless File.exist? file
41:         begin
42:           if File.lstat(file).directory? then
43:             d = Dir.open(file)
44:             begin
45:               for f in d
46:                 next if f == "." or f == ".."
47:                 if File::ALT_SEPARATOR and file =~ /^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then
48:                   f = file + f
49:                 elsif file == "/" then
50:                   f = "/" + f
51:                 else
52:                   f = File.join(file, f)
53:                 end
54:                 paths.unshift f.untaint
55:               end
56:             ensure
57:               d.close
58:             end
59:           end
60:         rescue Errno::ENOENT, Errno::EACCES
61:         end
62:       end
63:     end
64:   end

Skips the current file or directory, restarting the loop with the next entry. If the current file is a directory, that directory will not be recursively entered. Meaningful only within the block associated with Find::find.

See the Find module documentation for an example.

[Source]

    # File lib/find.rb, line 74
74:   def prune
75:     throw :prune
76:   end

[Validate]