APIdock / Ruby
/
method

find

ruby latest stable - Class: Find
find(*paths, ignore_error: true)
public

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

Returns an enumerator if no block is given.

See the Find module documentation for an example.

# File lib/find.rb, line 38
 def find(*paths, ignore_error: true) # :yield: path
 block_given? or return enum_for(__method__, *paths, ignore_error: ignore_error)
 fs_encoding = Encoding.find("filesystem")
 paths.collect!{|d| raise Errno::ENOENT, d unless File.exist?(d); d.dup}.each do |path|
 path = path.to_path if path.respond_to? :to_path
 enc = path.encoding == Encoding::US_ASCII ? fs_encoding : path.encoding
 ps = [path]
 while file = ps.shift
 catch(:prune) do
 yield file.dup.taint
 begin
 s = File.lstat(file)
 rescue Errno::ENOENT, Errno::EACCES, Errno::ENOTDIR, Errno::ELOOP, Errno::ENAMETOOLONG
 raise unless ignore_error
 next
 end
 if s.directory? then
 begin
 fs = Dir.children(file, encoding: enc)
 rescue Errno::ENOENT, Errno::EACCES, Errno::ENOTDIR, Errno::ELOOP, Errno::ENAMETOOLONG
 raise unless ignore_error
 next
 end
 fs.sort!
 fs.reverse_each {|f|
 f = File.join(file, f)
 ps.unshift f.untaint
 }
 end
 end
 end
 end
 nil
 end

AltStyle によって変換されたページ (->オリジナル) /