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

use*_*570 21 ruby

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

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

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

the*_*eIV 27

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

Dir.entries('/home/theiv').select { |f| File.file?(f) }
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我不得不使用`File.file?("/ home/theiv /#{f}")` (6认同)

Zep*_*ock 11

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


pet*_*ter 8

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

puts Dir['**/*'].select { |f| File.file?(f) }
Run Code Online (Sandbox Code Playgroud)


Mar*_*off -4

听起来您正在寻找Dir.entries

\n\n
\n

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

\n
\n\n

如果在 Google 上搜索如何解决此问题没有找到任何结果,您可以查看 Ruby 文档。

\n

  • `Dir.entries` 返回文件和子目录,与不带文件名掩码的 `glob` 类似。` Dir.entries("testdir") #=> [".", "..", "config.h", "main.rb"]`. 返回的前两个值是目录。 (7认同)