web-dev-qa-db-ja.com

特定のテキストを含むファイルの再帰的検索

ファイルのどこかに特定の文字列を含むサーバー上のすべてのファイルのリストを含むテキストファイルを再帰的に生成するにはどうすればよいですか?

次のコマンドを使用して文字列を再帰的に置き換えることができることを知っています

find /var/www -type f -print0 | xargs -0 sed -i 's/old string/new string/g'

文字列を置き換えたくはありません。文字列を含むすべてのファイルのリストが必要です。

4
oshirowanen

grepの代わりにsedを使用します。

find /var/www -type f -print0 | xargs -0 grep -i 'old string'

質問の言い方からすると、まだgrepに慣れていないようです。オプションの詳細については、コマンドラインのman grepのマニュアルページタイプを参照してください。

コメントに回答するための更新 --lオプションを追加して、ファイル名のみを表示してみてください。 -iは、検索で大文字と小文字を区別しません。どちらも使いやすいのはダッシュ1つです:grep -il

7
Doug Harris

検索せずにgrepを単独で使用することもできます。

grep -Rli 'old string' /var/www > list_of_files
4
garyjohn

コマンドに-lフラグを追加して、ファイル名のみを一覧表示してみてください。

find /var/www -type f -print0 | xargs -0 grep -li 'old string'
1
Ben V

Ackを試してください-grepよりも高速で、Perl正規表現をサポートしています。

ack -la <pattern> /var/www

一部のシステムでは、このパッケージは「ack」と呼ばれ、「ack-grep」と呼ばれることもあります。

0
Mark E. Haase