迭代一个目录中的每个文件
如何在ruby中编写循环以便我可以在每个文件上执行一段代码?
我对ruby很陌生,我已经断定要做到这一点的方法是每个循环。
ruby文件将从不同于我要循环访问的目录的目录执行。
我已经尝试过Dir.foreach
,但无法启动它。
正如其他人所说, Dir.foreach
在这里是一个不错的选择。 但是请注意, Dir.entries
和Dir.foreach
将始终显示.
和..
(当前和父目录)。 你通常不想在他们身上工作,所以你可以做这样的事情:
Dir.foreach('/path/to/dir') do |item|
next if item == '.' or item == '..'
# do work on real items
end
Dir.foreach
和Dir.entries
也显示目录中的所有项目 - 隐藏和非隐藏。 通常这就是你想要的,但如果不是,你需要做一些跳过隐藏的文件和目录。
或者,您可能想要查看提供简单通配符匹配的Dir.glob
:
Dir.glob('/path/to/dir/*.rb') do |rb_file|
# do work on files ending in .rb in the desired directory
end
这是我最喜欢容易阅读的方法:
Dir.glob("*/*.txt") do |my_text_file|
puts "working on: #{my_text_file}..."
end
你甚至可以扩展它以处理子目录中的所有文件:
Dir.glob("**/*.txt") do |my_text_file| # note one extra "*"
puts "working on: #{my_text_file}..."
end
Dir还具有更短的语法来获取目录中所有文件的数组:
Dir['dir/to/files/*'].each do |fname|
# do something with fname
end
链接地址: http://www.djcxy.com/p/25823.html