如何使用Dir.glob获取仅文件列表?

如何在指定目录中仅返回文件列表,而不是目录?

我有my_list = Dir.glob(script_path.join("*"))

这将返回目录中的所有内容,包括子目录。 我搜索但未能找到答案。

除了马克的回答, Dir.entries还会回复目录。 如果您只是想要文件,可以使用文件测试每个条目以查看它是文件还是目录file?

 Dir.entries('/home/theiv').select { |f| File.file?(f) } 

/home/theiv替换为您要查找文件的目录。

另外,看看文件 。 它提供了一系列可以检索文件的测试和属性。

Dir.glob('*').select { |fn| File.file?(fn) }

我认为参赛作品不会进行递归。 如果您希望子目录中的文件也使用

 puts Dir['**/**/*'].select { |f| File.file?(f) } 

如果你想一次性完成而不是先创建一个数组,然后用select迭代它,你可以这样做:

 my_list = [] Dir.foreach(dir) { |f| my_list << f if File.file?(f) } 

您可以使用Dir[] / Dir.globDir.entries获取文件列表。 它们之间的区别是前者返回完整路径,后者只返回文件名。

所以要注意以下映射段。 .select {|f| File.file?(f)} .select {|f| File.file?(f)} :使用完整路径它运行良好,而只有文件名,它有时工作有线。

FYR:

Dir [] , Dir.glob , Dir.entries

按照@ karl-li在@theIV解决方案中的建议,我发现这很好用:

 Dir.entries('path/to/files/folder').reject { |f| File.directory?(f) } 

你基本上只能用File.basename(file)获取文件名

 Dir.glob(script_path.join("*")).map{ |s| File.basename(s) } 

听起来你正在寻找Dir.entries

返回包含给定目录中所有文件名的数组。 如果指定的目录不存在,将引发SystemCallError。

如果搜索谷歌如何解决这个问题并没有产生任何结果,你可以浏览一下Ruby文档。