我想使用Ruby从一个文件夹中获得所有文件名。
当前回答
要递归地获取所有文件(严格来说只针对文件):
Dir.glob('path/**/*').select { |e| File.file? e }
或者任何不是目录的东西(File.file?将拒绝非常规文件):
Dir.glob('path/**/*').reject { |e| File.directory? e }
可选择的解决方案
在Dir等基于模式的查找方法上使用Find# Find。Glob实际上更好。请参阅“用Ruby递归列出目录的一行程序?”
其他回答
Dir.new('/home/user/foldername').each { |file| puts file }
你可能还想使用Rake::FileList(如果你有Rake依赖):
FileList.new('lib/*') do |file|
p file
end
根据API:
filelist是懒惰的。当给出可能的glob模式列表时 要包含在文件列表中的文件,而不是搜索文件 结构来查找文件,FileList保存后者的模式 使用。
https://docs.ruby-lang.org/en/2.1.0/Rake/FileList.html
一个简单的方法是:
dir = './' # desired directory
files = Dir.glob(File.join(dir, '**', '*')).select{|file| File.file?(file)}
files.each do |f|
puts f
end
下面的代码片段精确地显示了目录内的文件名称,跳过子目录和“。”,“..”带点的文件夹:
Dir.entries("your/folder").select { |f| File.file? File.join("your/folder", f) }
在Ruby 2.5中,你现在可以使用Dir.children。它以数组的形式获取文件名,除了"."和".."
例子:
Dir.children("testdir") #=> ["config.h", "main.rb"]
http://ruby-doc.org/core-2.5.0/Dir.html#method-c-children
推荐文章
- 如何从查找“类型d”中排除此/ current / dot文件夹
- Rails中的OO设计:在哪里放置东西
- 从包含文件名的路径获取不包含文件名的完整路径
- 给定一个类,查看实例是否有方法(Ruby)
- 如何拉特定的目录与git
- Git:从另一个分支复制目录中的所有文件
- PHP,获取没有文件扩展名的文件名
- 在日历应用程序中建模重复事件的最佳方法是什么?
- 如何在远程系统上使用Ansible任务移动/重命名文件
- 如何创建一个私有类方法?
- 从java.io.File获取java.nio.file.Path对象
- 无法安装pg gem
- 双* (splat)操作符做什么
- 如何使用Ruby on Rails进行HTTP请求?
- 用c#编写数据到CSV文件