この例のフォルダー構造を考えると:
/folder1/file1.txt /folder1/file2.djd /folder2/file3.txt /folder2/file2.fha
「/」からのgrep
を含むすべての*.txt
ファイルに対して再帰的なテキスト検索を実行するにはどうすればよいですか?
(そのフォルダーに"grep -r <pattern> *.txt"
ファイルがないため、「/」から実行すると.txt
は失敗します。)
私のバージョンのGNU Grepにはこのためのスイッチがあります:
grep -R --include='*.txt' $Pattern
次のように説明します。
--include=GLOB
ベース名がGLOBに一致するファイルのみを検索します(--excludeで説明されているワイルドカード一致を使用)。
多数のファイルがある場合は、xargsをコマンドに組み込んで、「引数リストが長すぎます」エラーを回避すると便利です。
find . -name '*.txt' -print | xargs grep <pattern>
zsh
のEXTENDED_GLOB
オプションを使用できる場合があります( docs )
grep <pattern> **/*.txt
http://betterthangrep.com で確認することをお勧めします。これには、ファイルタイプで検索するファイルを選択する機能があります。
find . -name '*.txt' -type f -exec grep <pattern> {} \;
Mannisの回答は、すべてのテキストファイルに新しいgrepプロセスをフォークします。そこにlotsのテキストファイルがある場合は、最初にすべてのファイルをgrepすることを検討し、それが完了したら.txtファイルを選択することができます。
grep -r <pattern> * | grep \.txt:
これはディスクを集中的に使用しますが、いずれにしても高速になる可能性があります。