如何使用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.glob
或Dir.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文档。