web-dev-qa-db-ja.com

特定の内容の.txtファイルを一覧表示する方法は?

Wordの「Ubuntu」が含まれているすべての.txtファイルをフルパスでリストするにはどうすればよいですか。非テキストファイルを無視します。値を比較するときは、大文字と小文字を区別しないでください。つまり、UBUNTU、ubuNtu、またはUbUnTuは、指定された検索フレーズと同じものとして扱われます。

5
Sampad Mund

GNU grepは、globパターンに基づく再帰検索をサポートしています。

grep --include='*.txt' -ril ubuntu /path/to/dir

正規表現を検索しない場合、固定文字列マッチング(-F)を含めると、このプロセスははるかに速くなります。別の最適化は、それが必要でないことがわかっている場合は、ignore-case(-i)を削除することです。

8
Thor

シンプルfind + grepソリューション:

find . -type f -name "*.txt" -exec grep -li --binary-files=without-match 'ubuntu' {} \;

grep詳細:

  • l-通常の出力を抑制します。代わりに、通常は出力が出力される各入力ファイルの名前を出力します
  • i-大文字小文字の区別を無視し、大文字小文字のみが異なる文字が互いに一致するようにします
3
RomanPerekhrest

grepユーティリティの一部の実装には、grepにバイナリファイルを無視させる-Iフラグがあります。 -iを使用して大文字と小文字を区別しない一致を実行し、-Fを使用して(正規表現ではなく)固定文字列と一致することもできます。別のwordsを探している場合は、一部のgrep実装にある-wを使用する必要があります。次に、サブディレクトリに再帰するために、-Rを使用してファイルを再帰的に検索し、-lを使用してパターンの一致を含むファイルの名前を取得することができます。次に、GNU grepがある場合、--includeを使用して、特定の拡張子のファイルのみを表示します。

grep -Fil -IRw --include='*.txt' 'ubuntu' /path/to/top/dir

使用される標準オプション:-F-i-l

使用されている非標準オプション(一部のgrep実装でサポート):-w-I-R--include


--includeがなく、--binary-filesの代わりに-Iを使用するfindおよびOpenBSD grepの使用(GNU grepにもこれがあります国旗):

find /path/to/top/dir -type f -name '*.txt' \
    -exec grep -Fil -w --binary-files=without-match 'ubuntu' {} +
3
Kusalananda

これは私が通常使用するものです:

find /path/to/top/dir -type f -name '*.txt' -exec grep -iHI ubuntu {} \;
1
fpmurphy