を含むすべての文字列を見つける必要があります<some_word>
。検索する必要がある MAIN ディレクトリがあり、ファイルやその他のディレクトリ (ファイルを含む) が存在する可能性があります。1 つのディレクトリに入らなければなりません - そこにあるすべてのファイルをチェックし<some_word>
、メイン ディレクトリに戻ります - 別のディレクトリに入ります - そこにあるすべてのファイルをチェックし、メイン ディレクトリに戻ります... などです。メインディレクトリにファイルしかない場合、これを作成するのに問題はありません...しかし、ディレクトリで作成する方法がわかりません...助けてください。
質問する
1529 次
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 に答える