• ベストアンサー

すべてのディレクトリに対してgrepをかける方法について教えてください。

たとえば、/(ルート)配下にあるすべてのディレクトリ(サブディレクトリ)配下のファイルに対して、'test'という文字列が入っているかどうかを調べたいと思っています。 サブディレクトリは何階層にもなっており、存在するすべてのファイルに対して検索をかけたいと思っています。 以上のような場合にどのようにgrepを使用すればよいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

grepの種類によっては、「-r」オプション(ディレクトリを再帰的に検索) が使えることがあります。 >cd / >grep -r test * なければ「find」コマンドと組み合わせる方法があります。 >find ./ -type f -exec grep -H test \{\} \; サブディレクトリの階層があらかじめ分かっているなら次のような方法もあります。 >grep test * */* */*/* (3階層の場合です。ドット付きファイル(.loginとか)も検索したいなら「.*」等も 入れる必要があります。) お使いの環境が分かりませんので、状況によって使い分けてください。

DynamisH
質問者

お礼

回答ありがとうございます。 findと組み合わせることで確認ができました。

関連するQ&A

  • すべてのファイルに対してgrepをかける方法を教えてください。

    /(ルート)配下にあるすべてのディレクトリ(サブディレクトリ)配下のファイルに対して、'test'という文字列が入っているかどうかを調べたいと思っています。 サブディレクトリは何階層にもなっており、存在するすべてのファイルに対して検索をかけたいと思っています。 以上のような場合にどのようにgrepを使用すればよいのでしょうか?

  • UNIXコマンド "grep" "find" の使い方教えて下さい。

    1)以下(1)、(2)を検索したいとします。  (1)"wrk_str"という文字列の記述があるファイル名  (2)tmp_file.c という名前のファイル名 2)ディレクトリ構成が以下になってるとします。  /home/users/複数のディレクトリが存在/複数のディレクトリが存在/複数のファイルが存在 3)/home/users/ 配下に検索したい文字列、ファイルがあるとした場合、どのように   探せばいいでしょうか?   /home/users/配下で得に条件なしでgrepすると、"Arg list too long"(量が多い?)の   メッセージが出て、検索できませんでした。 UNIXコマンドに詳しい方、宜しくお願いします。 それ以外にも、色々検索方法知っていたら教えて下さい!!

  • grepで特定のディレクトリを除外して再帰検索するには?

    /hoge下のサブディレクトリ、ファイルで文字列mojiretsuを検索したいのですが 特に/hoge/foo下は除外して検索する場合には grepコマンドはどう記述したらいのでしょうか? # grep -lr mojiretsu /hoge だと/hoge/fooも検索されてしまいますよね。

  • grepによる文字列検索のシェル作成の手順

    Solaris9のOSにて、以下の仕様のシェルを作成したいと思っています。 特定のディレクトリ配下にある全てのファイル内で特定の文字列「abc」のある行を抽出し、ファイル化したい。 (検索対象が1ファイルであれば、grep -n abc test.txtでよいですが、ファイル名がたくさんある場合のシェルの作り方がわかりません。) また、どのファイルから検索したのかがわかるように抽出した行の前にファイル名をつけられると大変助かります。 例) ---test1.txtから検索--- 8:XXXXabcXXXX 11:XXXXabcXXX ---test2.txtから検索--- 10:XXXXXXXXabcXX お手数ですが、宜しくお願いします。

  • grepの書き方がわかりません。

    Perlの初心者なんですが、以下のようなテーマをもらってプログラムを作っています。  第一引数にディレクトリのパス、第二引数に検索し たいファイル名を指定して第一引数の  パス以下にある全てのディレクトリを検索してファイルがあればそのパスを表示させなさい。 一応できたのですがプログラムの記述の一部がよくわかりません。以下のプログラムは一部です。 local ($dir, $file) = @_; opendir(DIR,$dir) or die @data = readdir(DIR);#ディレクトリの内容を読む closedir(DIR);#ディレクトリを閉じる local @fname = grep {-f "$dir/$_"} @data; local @dname = grep {-d "$dir/$_"} @data; $dir,$fileには第一、第二引数の文字列をいれているのですがそのディレクトリになかにファイル、ディレクトリがないか検索するためgrepを使っています。それで"$dir/$_"の部分の意味がよくわかりません。 この部分は他のサイトであったものを流用しただけなのですがよくわからないまま使ってたまたま動いたから使用しててこのままでは理解していないままなので どうか教えてほしいです。 あともう一点ありましてgrepのところで最初自分で書いた時  local @fname = grep (-f,@data); というように書きました。ファイルが第一引数にあるときは問題なく動作するのですがその下にあるディレクトリにあるとなぜかプログラムが終わりません。 デバッグとして@dataの中身を表示したらそのディレクトリの検索をしてはいるんですが、その中に目当てのファイルがあるはずなのに@dataの中身がからっぽで ファイルがないことになっています。この違いがどうしてもわかりません。  以上の二点がわからないんですがどうかお手数ですがどなたか教えてください。  

    • ベストアンサー
    • Perl
  • 全ディレクトリの全ファイルから特定の文字を検索

    全てのファイル、サブディレクトリの中身も含めて検索する コマンドはありますでしょうか。下記のようにしても反応がなく、 ためしにmojiと書いただけのファイルを置いてもHITせず、 どうしたら全部のファイルの中身から特定の文字列を 探し出せますでしょうか less /* |grep moji

  • サブディレクトリ内のすべてのファイルの文字の置換

    コマンドラインから、サブディレクトリ内のすべてのファイルの文字を置換する方法を教えてください。 for x in *.*; \ do \ sed -e 's/original_pattern/replaced_pattern/g' $x > ${x}_tmp ; \ mv -f ${x}_tmp $x ; \ done とすることにより、ひとつのディレクトリ内であれば、文字列を変換できました。 しかし、そのディレクトリのサブディレクトリ内のファイルについても、再帰的に変換を行いたいのです。 grep -r などと組み合わせればよいのかとも思ったのですが、結局よくわかりませんでした。 よろしくお願いいたします。

  • ファイル全てのある文字列を変更したい

    Redhat7.1Jを使ってます。 あるディレクトリ配下に属するファイル(サブディレクトリの下のファイルも)全てを対象に 「abc」等の文字列を全て「xyz」等に変換しようとしています。 どのような方法がいいかご指導願います。 ファイル総数は10,000個を越えます。 サブディレクトリも数百あります。

  • linux(UNIX) の grep で、あるディレクトリ以下を再帰的に見て、全ての *.html ファイルに grep をかける方法

    linux(UNIX) の grep で、あるディレクトリ以下を再帰的に見て、全ての *.html ファイルに grep をかける方法を教えてください。 簡単な事なのかもしれませんが、コマンドから打つ場合、どのようにすればよいか、分かりません。 Windows の秀丸のgrepなら簡単に出来るのですが。。。 どなたか教えてくださいませ。。。

  • grepについて

    Freebsdにおいてgrepというコマンドがあると思いますが、このgrepで特定の階層にある特定のファイルを探すことはできるのでしょうか? あるファイルの中に存在する、特定の文字などを検索するやり方は分かるのですがファイル名を検索しようとしても、やり方が分からずできません。 それとも、もともとgrepコマンドは、あるファイル内に存在する文字を検索するためのコマンドなのでしょうか?? その辺りも、よく分かりません。 他に、grepはこういう時に便利!!みたいな例があれば教えてくださいませ。 ご回答の程、よろしくお願い致します。