迭代一个目录中的每个文件

如何在ruby中编写循环以便我可以在每个文件上执行一段代码?

我对ruby很陌生,我已经断定要做到这一点的方法是每个循环。
ruby文件将从不同于我要循环访问的目录的目录执行。

我已经尝试过Dir.foreach ,但无法启动它。


正如其他人所说, Dir.foreach在这里是一个不错的选择。 但是请注意, Dir.entriesDir.foreach将始终显示... (当前和父目录)。 你通常不想在他们身上工作,所以你可以做这样的事情:

Dir.foreach('/path/to/dir') do |item|
  next if item == '.' or item == '..'
  # do work on real items
end

Dir.foreachDir.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

上一篇: Iterate through every file in one directory

下一篇: Ruby: Proc#call vs yield