如何获得使用Dir.glob只有文件的列表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得使用Dir.glob只有文件的列表?相关的知识,希望对你有一定的参考价值。
我怎么能只返回文件,而不是目录列表,在指定的目录?
我有my_list = Dir.glob(script_path.join("*"))
此目录,包括子目录返回的一切。我搜查,但一直没能找到答案。
除了马克的回答,Dir.entries
会给后面的目录。如果你只是想要的文件,你可以测试每个条目,看它是否是一个文件或目录,使用file?
。
Dir.entries('/home/theiv').select { |f| File.file?(f) }
您要查找的文件中的任何目录替换/home/theiv
。
另外,看看File。它提供了一系列的测试和性能,可以检索有关文件。
Dir.glob('*').select { |fn| File.file?(fn) }
参赛作品不这样做rescursion我想。如果你想在子目录中的文件还使用
puts Dir['**/*'].select { |f| File.file?(f) }
如果你想这样做在一个去,而不是首先创建数组,然后迭代在它与select
,你可以这样做:
my_list = []
Dir.foreach(dir) { |f| my_list << f if File.file?(f) }
继@卡尔 - 李的在@theIV解决方案的建议,我发现这工作得很好:
Dir.entries('path/to/files/folder').reject { |f| File.directory?(f) }
您可以使用Dir[]
/ Dir.glob
或Dir.entries
获取文件列表。它们之间的区别是前者返回完整路径,而后者只返回文件名。
所以,要注意以下映射段.select {|f| File.file?(f)}
:完整路径它工作得很好,而只有文件名,它有时工作有线。
GUY:
你基本上可以先手与File.basename(file)
文件名
Dir.glob(script_path.join("*")).map{ |s| File.basename(s) }
这听起来像你正在寻找Dir.entries
:
返回包含在给定的目录中的所有文件名的数组。将引发SystemCallError如果指定目录不存在。
如果谷歌搜索如何解决这个问题不调高任何结果,你可以看看通过Ruby文档。
以上是关于如何获得使用Dir.glob只有文件的列表?的主要内容,如果未能解决你的问题,请参考以下文章