如何在指定目录中返回仅包含文件而非目录的列表?
我有my_list = Dir.glob(script_path.join("*"))
这将返回目录中的所有内容,包括子目录。我搜索但未能找到答案。
答案 0 :(得分:27)
除了Mark的回答,Dir.entries
还会回复目录。如果您只是想要这些文件,可以使用file?
测试每个条目以查看它是文件还是目录。
Dir.entries('/home/theiv').select { |f| File.file?(f) }
将/home/theiv
替换为您要查找文件的目录。
另外,请查看File。它提供了一系列可以检索文件的测试和属性。
答案 1 :(得分:11)
Dir.glob('*').select { |fn| File.file?(fn) }
答案 2 :(得分:8)
我认为参赛作品不会进行短途旅行。如果您希望子目录中的文件也使用
puts Dir['**/*'].select { |f| File.file?(f) }
答案 3 :(得分:4)
如果你想一次性完成,而不是先创建一个数组然后用select
迭代它,你可以这样做:
my_list = []
Dir.foreach(dir) { |f| my_list << f if File.file?(f) }
答案 4 :(得分:1)
您可以使用Dir[]
/ Dir.glob
或Dir.entries
来获取文件列表。它们之间的区别在于前者返回完整路径,而后者只返回文件名。
所以要注意以下映射段.select {|f| File.file?(f)}
:完整路径它运行良好,而只有文件名,它有时会有效。
FYR:
答案 5 :(得分:1)
按照@ karl-li在@theIV解决方案中的建议,我发现这很好用:
Dir.entries('path/to/files/folder').reject { |f| File.directory?(f) }
答案 6 :(得分:0)
您基本上可以使用File.basename(file)
来获取文件名
Dir.glob(script_path.join("*")).map{ |s| File.basename(s) }
答案 7 :(得分:-3)
听起来你正在寻找Dir.entries
:
返回包含给定目录中所有文件名的数组。如果指定的目录不存在,将引发SystemCallError。
如果搜索Google如何解决此问题并未产生任何结果,您可以查看Ruby文档。