我需要查找包含<some_word>
的所有字符串。有MAIN目录,我们必须搜索,可以有文件和其他目录(带文件)。它必须进入一个目录 - 检查<some_word>
的所有文件,返回主目录 - 输入另一个directroy - 检查那里的所有文件,返回主目录......依此类推。我没有问题,当主目录中只有文件...但不知道如何使用目录...请帮助我。
答案 0 :(得分:4)
处理目录中的所有文件:
Dir['**/*'].each do |filepath|
# filepath is a string path to the file or directory
# relative from the working directory of the script
end
因此,如果您已经拥有find_text_in_file( some_word, filepath )
,则可以:
Dir['**/*'].select{|f| File.file?(f) }.each do |filepath|
find_text_in_file( some_word, filepath )
end
请注意,上面将以深度优先遍历搜索文件。如果您想以广度优先的方式进行搜索,可以改为使用:
files = Dir['**/*'].select{ |f| File.file?(f) }
files.sort_by{ |f| f.split(File::SEPARATOR).length }.each do |filepath|
find_text_in_file( some_word, filepath )
end
或者,如果您已经拥有find_word_in_directory( some_word, dirpath )
,那么您可以执行以下操作:
Dir['**/*'].select{ |f| File.directory?(f) }.each do |dirpath|
find_word_in_directory( some_word, dirpath )
end