UNIX系OSでカレントディレクトリ以下を線形検索するより洗練された方法

昔書いたエントリを眺めていると、当時の自分の知識の範囲内で物事を解決しようとしているので、問題に対する解決方法が洗練されていないことがあります。たとえば以下のエントリはxargsコマンドを知らない状態で書きました。

シェル関数で指定ディレクトリ以下の全文検索を簡単にする - yanbe.log

今改めて読んでみるとシェル関数とか定義していて大げさです。そこで自分でフォローアップしてみようと思います。結論から言うと同じことが以下のコマンドで出来ますし、汎用性も高いです。

$ find TARGET_DIR | xargs grep TARGET_STRING

内容としては、

  1. findでTARGET_DIR以下にある全ファイル名をリストアップ
  2. それらのファイル名1つ1つについて、pipeでつないだxargsがgrepを起動
  3. マッチする部分があればファイル名・行番号とともに出力する

というものです。

不慣れなソースコードツリーでコードリーディングをするときで、特定の識別子(関数や定数)が使われている箇所に当たりつけるのに便利。

cdやlsなどを通常のコマンドとすると、xargsはメタコマンドといった感じのコマンドで、標準入力で受け取った各行に対して任意のコマンドを実行したり出来るため、pipeと組み合わせることでアイデア次第でかなり使えます。

つづきは man xargs で。