findコマンドを使ってカレントディレクトリ配下のファイル全てにgrepする方法 | 瀬戸内の雲のように

findコマンドを使ってカレントディレクトリ配下のファイル全てにgrepする方法

Posted: 2018-05-08


スポンサーリンク

目次

  • 背景
  • 解決方法
    • (前提)findコマンドとは

      背景

      複数ファイルで構成されたアプリケーション(railsとか)の開発を行っている時など、「あれ、あのファイルどこに置いたっけ?」ってなることがよくあります。

      初心者だった頃は各ディレクトリに移動してからgrep "文字列" *みたいなことを総当たり的にやっていました。が、これは効率が悪くなにかいい方法がないかな~と思っていました。

       

      解決方法

      実はこの問題、findコマンドを使えば一発で解決します。

      (前提)findコマンドとは

      そのまんまですが、ファイルやディレクトリを探すコマンドです。findコマンドではファイル名や更新時間など様々な条件に合致するファイル・ディレクトリを探すことができます。

       

      本題: ディレクトリ配下のファイル全てにgrepする方法

      さて、早速本題です。現在のディレクトリ配下にあるファイル全てにgrepするコマンドは以下のとおりです。

      コマンド

      find ./ -type f -exec grep -l "検索したい文字列" {} \;
      

      結果はこんな感じです

      ./aaa.txt
      ./tmp/bbb.sh
      

      上記のように検索したい文字列にヒットしたファイルのファイル名が一覧で表示されます。

       

      解説

      上記で指定したオプションを解説します。このコマンドでは2つのオプションを使っています。

       

      オプション1: -type

      まず1つは-typeオプションです。
      このオプションではオブジェクトの種類(ファイル, ディレクトリなど)を指定します。今回で言えばgrepの対象はファイルなので-type fと言うオプション指定でファイルのみを対象としました。

      オプション2: -exec

      もう一つのオプションは -execオプションです。
      このオプションは、** ヒットしたファイルに対して処理を行う** オプションです。今回で言えばgrepコマンドを行なっています。

      なお、-execオプションは書式が決まっていて、

      -exec "実行したいコマンド" {} ¥;
      

      と言う書式です。末尾に{} ¥; と言う部分がありますが、これはおまじない的に付ける必要がありますので忘れずに付けてください。
      (なお、{}の部分には処理の対象であるファイル名が入ります)

      以上となります。findコマンドを使いこなせると一人前になった気がしますね!


      スポンサーリンク




      コメント一覧

      2018/08/31 14:45:41

      名無しさん

      grep の -r オプションでは駄目でしょうか?


      2018/09/17 11:11:41

      管理人さん

      >名無しさん
      コメントありがとうございます!
      確かにgrep -r でもいいですね。。。笑
      (以前grepだとダメでfindを見つけた気がするのですが、気のせいだったかもしれないです)

      情報ありがとうございます!



      コメントを投稿する


      お名前


      コメント内容





      TOP back