Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

In Files

  • find.rb

Methods

Class/Module Index [+]

Quicksearch

Find

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

Public Class Methods

find(*paths) click to toggle source

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.

 
               # File find.rb, line 35
def find(*paths) # :yield: path
  paths.collect!{|d| d.dup}
  while file = paths.shift
    catch(:prune) do
      yield file.dup.taint
      next unless File.exist? file
      begin
        if File.lstat(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
            
prune() click to toggle source

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.

See the Find module documentation for an example.

 
               # File find.rb, line 74
def prune
  throw :prune
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus