2

を含むすべての文字列を見つける必要があります<some_word>。検索する必要がある MAIN ディレクトリがあり、ファイルやその他のディレクトリ (ファイルを含む) が存在する可能性があります。1 つのディレクトリに入らなければなりません - そこにあるすべてのファイルをチェックし<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 に答える