特定の名前を持ち、コンテンツに特定の文字列を含むすべてのファイルの場所を見つける方法は?

特定の名前を持ち、コンテンツに特定の文字列を含むすべてのファイルの場所を見つける方法は?

index.php「hello」という文字列を含むすべてのファイルの場所を見つけたいです。

ありがとうございます。

答え1

grep次のように使用しますfind

find /top-dir -type f -name index.php -exec grep -l 'hello' {} +

/top-dir検索したい最上位ディレクトリへのパスはどこにありますか?

を使用すると、-type f一般的なファイルだけを見てfind名前が 。-name index.phpインファイルに検索を制限しますindex.php

-exec grep -l 'hello' {} +見つかったファイルに対して実行され、パターン()に一致するすべてのファイルのパスをgrep出力します。'hello'それはパスの出力を引き起こします-lgrep

最後に、通話ごと+findできるだけ多くのファイルが提供されますgrep。これ';'をまたはに変更すると、一度に1つのファイルが呼び出されるため、\;ファイルgrepが多いと速度が遅くなる可能性があります。

答え2

コマンドでgrep以下を使用しますfind

find -type f -name "index.php" -exec grep -q 'hello' '{}' \; -exec echo '{}' \;

答え3

Bashシェルを使用している場合は、サブディレクトリで一致するglobstarオプションを有効にしてから、通常どおりに使用してください。**grep

shopt -s globstar
grep -l hello **/index.php

shopt -s globstar(無効化オプションを使用しない限り、この操作はシェルで一度だけ実行できますshopt -u globstar。)

答え4

他の2つのコマンド方法find

find -type f -name "index.php" -exec grep -l 'hello' {} \;

find -type f -name "index.php" -exec grep -q 'hello' {} \; -print

関連情報