あいさつ
こんにちは。今年はAIの発展が著しい年でしたね。
中でも、ChatGPTとCursorにはお世話になっています。
今回は私がCursorの「with codebase」でファイルを探すのを、
シェル(bash)のコマンドで実現できないかを考えたものになります。
よろしくお願いします。
結論
せっかちな方のために、結論を先に記述します。
$ find . -type f -name "*" -exec grep -rn "hoge" {} \;
解説
まず、カレントディレクトリ(現在のディレクトリ)のファイル形式のものすべてを探しています。
findコマンドは、検索のコマンドです。カレントディレクトリのファイルを出力する準備をするのに使っています。
「-type -f」でファイル形式のもの、「-name "*"」ですべての名前のファイルをという意味にになります。
「*」はワイルドカードと呼ばれます。
「-exec command」もfindコマンドのオプションで、見つけたファイルやディレクトリに対して指定されたコマンドを実行します。
「grep -rn "hoge"」は、MacOSのマニュアルでは、
Recursively search subdirectories listed.
となっており、日本語で「リスト化されたサブディレクトリを再起的に検索します」という意味ですが、
ここではカレントディレクトリからのパスを表示するのに使っています。
"hoge"という文字列を抽出して出力するようになっていますので、用途に合わせてご変更ください。
「{}」はプレースホルダーです。findで見つけたファイルやディレクトリのパスを置き換えます。
ここでは、findで「-f」としているので、ファイルのみですね。
「\;」は、findの「-exec」オプションにおいて、コマンドの終了を示すセミコロンです。
「{}」と「;」はしばしば、同時に使われることが多いです(個人的な意見です)。
終わりに
Cursorの「with codebase」は、大変便利な機能ですが、無料版だとトークンに制限があることがネックになっています。
このコマンドはファイルを探して文字列を抽出するだけですが、それでも私は無料で使える割に十分な機能があると思います。
以上です。お疲れ様でした。
追記
行数を表示するために、grepの「-n」オプションを追加しました。