ファイルのどこかに特定の文字列を含むサーバー上のすべてのファイルのリストを含むテキストファイルを再帰的に生成するにはどうすればよいですか?
次のコマンドを使用して文字列を再帰的に置き換えることができることを知っています
find /var/www -type f -print0 | xargs -0 sed -i 's/old string/new string/g'
文字列を置き換えたくはありません。文字列を含むすべてのファイルのリストが必要です。
grep
の代わりにsed
を使用します。
find /var/www -type f -print0 | xargs -0 grep -i 'old string'
質問の言い方からすると、まだgrep
に慣れていないようです。オプションの詳細については、コマンドラインのman grep
のマニュアルページタイプを参照してください。
コメントに回答するための更新 --l
オプションを追加して、ファイル名のみを表示してみてください。 -i
は、検索で大文字と小文字を区別しません。どちらも使いやすいのはダッシュ1つです:grep -il
検索せずにgrepを単独で使用することもできます。
grep -Rli 'old string' /var/www > list_of_files
コマンドに-lフラグを追加して、ファイル名のみを一覧表示してみてください。
find /var/www -type f -print0 | xargs -0 grep -li 'old string'
Ackを試してください-grepよりも高速で、Perl正規表現をサポートしています。
ack -la <pattern> /var/www
一部のシステムでは、このパッケージは「ack」と呼ばれ、「ack-grep」と呼ばれることもあります。