Linux で find と grep を使って大量のファイルから特定の文字列を検索する

シェアする

Linux で何かある文字列を検索する際、grep コマンドを良く用います。例えば以下のように使います。

$ grep -rin 'needle' *

以下の引数を良く利用します。

-G 検索に正規表現を使用する
-数字 指定した数字分、前後行を表示する
-n 行番号を表示する
-i 検索時に大文字と小文字の区別をしない
-r ファイルを再帰的に検索する
-v マッチしない行を表示

ところが grep のみではファイルが大量にある場合に "Argument list too long" とか "引数リストが長すぎます" とか言われる事があります。そんなときは xargs と組み合わせると良いです。

$ find ./ -type f -print | xargs grep 'needle'

各コマンドには以下のような意味があります。

  • find ./ -type f カレントディレクトリ以下のファイルを全て標準出力に出す。
  • | 標準出力に出力したものを次のコマンドへ渡す。
  • xargs 渡された標準出力を次に書くコマンドの引数として利用する。
  • grep 'needle' xargs で渡された引数のファイルから needle を検索する。

これでファイルがいくらあろうが検索できます。

Sponsored Link

シェアする

フォローする