2

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

4

1 回答 1

5

处理目录中的所有文件:

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
于 2012-05-14T20:17:58.610 回答