• ベストアンサー

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

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

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

  • ベストアンサー
noname#41855
noname#41855
回答No.3

コメントが付かないようなので・・・ > ためしてみたところ > ? > と表示され、 行末のセミコロン(;)を忘れていませんか? 僕のを見やすいようにすべて全角で書くと以下になります。 find / -type f -exec grep test {} /dev/null ¥; これを実際には半角で入力してください。

DynamisH
質問者

お礼

回答ありがとうございます。 ind / -type f -exec grep test {} /dev/null ¥; にて確認がとれました。

DynamisH
質問者

補足

すみません ; 抜けてました。。。 ご指摘ありがとうございます。

その他の回答 (4)

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.5

#4最終行訂正 誤:(ls -R / | grep -v / | exec test /dev/null の方がいいかな) 正:(ls -R / | grep -v / | exec grep test /dev/null の方がいいかな) 肝心の grep が落ちてました・・・

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.4

grep の再帰オプション (-r)やfindを使う以外の方法では ls の再帰オプション (-R) を使って、 ls -R / | exec grep test /dev/null のような手もあるかと思います。 (ls -R / | grep -v / | exec test /dev/null の方がいいかな)

DynamisH
質問者

お礼

回答ありがとうございます。 ls -Rを使う手もあるのですね。 今回はfindが使えたのでfindで実行しました。

noname#41855
noname#41855
回答No.2

こっちの方がいいかな? find / -type f -exec grep test {} /dev/null \; -type fでファイルだけをgrep対象にします。 grepはファイル名が1つだけだと行頭にファイル名を表示しないので/dev/nullを指定して見た目上2つのファイルにします。 また、全ファイルへのアクセス権利のあるユーザー(rootがベスト)で実行しないとパーミッションエラーになるので注意してください。

DynamisH
質問者

お礼

必ずひっかかる文字列にてコマンドを実行し、 コマンドの信頼性の確認が取れました。 回答ありがとうございます。

DynamisH
質問者

補足

回答ありがとうございます。 コマンドは実行でき、echo $?で0が帰ってきています。 が、本当にできたのか・・・というのが何かに残るようにできないでしょうか。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

検索にヒットしないファイル名も全て表示されてしまいますが、とりあえず。 find / -print -exec grep test {} \;

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コマンドに詳しい方、宜しくお願いします。 それ以外にも、色々検索方法知っていたら教えて下さい!!

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

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

  • 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
  • grepで特定のディレクトリを除外して再帰検索するには?

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

  • grepについて

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

  • grepの使い方

    "A.lst"と"B.lst"の2つのファイルがあります。 ともにディレクトリ階層の一覧が記述されています。 2つのファイルを比較して、A.lstのディレクトリ階層の文字列を 含む行を、B.lstから抽出して、リダイレクトで出力するには、 どういうコマンド操作になるのでしょうか。 特定の文字列ならば単純に、cat B.lst | grep moziretsu > sample.lst でいいわけですが、この文字列がA.lstファイル内に複数行あり、 それを順にgrepするにはどうすればいいのかがわかりません。 シェルもただいま勉強中です。 よろしくご教授願います。

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

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

  • FreeBSDでWindowsの秀丸エディタみたいなgrepする方法?

    FreeBSDでWindowsの秀丸エディタみたいなgrepする方法があったら教えて下さい。 たとえば、秀丸ではこんな風にgrepしてます。 検索する文字列:hoge 検索するファイル:*.c *.h 「大文字/小文字の区別」にチェック 「単語の検索」にチェック 「サブフォルダも検索」にチェック どなたか分かる方、よろしくお願いします。