Ruby函数列表文件递归

ind*_*ndi 4 ruby file function

我需要一个递归函数来列出文件夹中的文件:

def procdir(dirname)
  data = ''
  Dir.foreach(dirname) do |dir|
    dirpath = dirname + '/' + dir
    if File.directory?(dirpath) then
      if dir != '.' && dir != '..' then
        #puts "DIRECTORY: #{dirpath}" ; 
        procdir(dirpath)
      end
    else
      data += dirpath
    end
  end
  return data
end
Run Code Online (Sandbox Code Playgroud)

但结果是:为空

dbe*_*hur 16

Dir#glob当你给它**全局时,Stdlib会递归.

def procdir(dir)
  Dir[ File.join(dir, '**', '*') ].reject { |p| File.directory? p }
end
Run Code Online (Sandbox Code Playgroud)


ckr*_*use 8

使用find模块:

require 'find'

pathes = []
Find.find('.') do |path|
  pathes << path unless FileTest.directory?(path)
end

puts pathes.inspect
Run Code Online (Sandbox Code Playgroud)


Jik*_*ose 6

旧线程,但也许有人会觉得有用:

array_of_all_files = Dir .glob("**/*") .reject { |file_path| File.directory? file_path }

  • 你为什么要重复一个与我 [8 个月前发布的] (http://stackoverflow.com/a/15503079/1074296) 几乎相同的答案?[`Dir::[]`](http://ruby-doc.org/core-2.0/Dir.html#method-c-5B-5D) 与 `Dir.glob` 相同。`File.join('**', '*')` 是一种更便携的方式来表达 `"**/*"`。 (3认同)