如何获得使用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.globDir.entries获取文件列表。它们之间的区别是前者返回完整路径,而后者只返回文件名。

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

GUY:

Dir[]Dir.globDir.entries

另一答案

你基本上可以先手与File.basename(file)文件名

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

这听起来像你正在寻找Dir.entries

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

如果谷歌搜索如何解决这个问题不调高任何结果,你可以看看通过Ruby文档。

以上是关于如何获得使用Dir.glob只有文件的列表?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby Directory Glob递归绝对路径

在 Ruby 中,如何在目录列表中的文件夹之前列出/排序文件?

文件列表和目录之间的复制

如何使用Ruby-Rails删除文件夹的所有内容?

Ruby:查找最近修改的文件

Ruby Dir 类和方法