在子目录中的文件中搜索字符串

时间:2012-05-14 20:11:54

标签: ruby string file search directory

我需要查找包含<some_word>的所有字符串。有MAIN目录,我们必须搜索,可以有文件和其他目录(带文件)。它必须进入一个目录 - 检查<some_word>的所有文件,返回主目录 - 输入另一个directroy - 检查那里的所有文件,返回主目录......依此类推。我没有问题,当主目录中只有文件...但不知道如何使用目录...请帮助我。

1 个答案:

答案 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

有关详细信息,请参阅Dir.[]Dir.glob的文档。

因此,如果您已经拥有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