Iterate through every file in one directory
How do I write a loop in ruby so that I can execute a block of code on each file?
I'm new to ruby, and I've concluded that the way to do this is a do each loop.
The ruby file will be executed from a different directory than the directory I want to loop through.
I've tried the Dir.foreach
and I couldn't get it to work.
As others have said, Dir.foreach
is a good option here. However, note that Dir.entries
and Dir.foreach
will always show .
and ..
(the current and parent directories). You will generally not want to work on them, so you can do something like this:
Dir.foreach('/path/to/dir') do |item|
next if item == '.' or item == '..'
# do work on real items
end
Dir.foreach
and Dir.entries
also show all items in the directory - hidden and non-hidden alike. Often this is what you want, but if it isn't, you need to do something to skip over the hidden files and directories.
Alternatively, you might want to look into Dir.glob
which provides simple wildcard matching:
Dir.glob('/path/to/dir/*.rb') do |rb_file|
# do work on files ending in .rb in the desired directory
end
This is my favorite method for being easy to read:
Dir.glob("*/*.txt") do |my_text_file|
puts "working on: #{my_text_file}..."
end
And you can even extend this to work on all files in subdirs:
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/25824.html
上一篇: 如何将红宝石散列对象转换为JSON?
下一篇: 迭代一个目录中的每个文件