def foreachfile(file, &block) return if /^(\.|\.\.)$/ =~ File.basename(file) block.call(file) if File.directory?(file) Dir.foreach(file) do |f| foreachfile(File.join(file, f), &block) end end end foreachfile("/usr/lib/ruby") do |f| p f end