「Ubuntu」という単語を含むフルパスですべての.txtファイルを一覧表示する方法。テキスト以外のファイルは無視されます。値を比較するときは大文字と小文字を無視する必要があります。つまり、UBUNTU、ubuNtu、またはUbUnTuは、指定された検索構文と同じと見なされます。
答え1
GNU grep は glob パターンに基づく再帰検索をサポートします。たとえば、次のようになります。
grep --include='*.txt' -ril ubuntu /path/to/dir
正規表現を検索しない場合、-F
固定文字列一致()を含めると、このプロセスははるかに高速になります。別の最適化は、-i
必要でない場合は無視()を削除することです。
答え2
シンプルfind
+grep
解決策:
find . -type f -name "*.txt" -exec grep -li --binary-files=without-match 'ubuntu' {} \;
grep
詳細:
l
- 代わりに通常の出力を抑制します。 print は通常、各入力ファイルの名前を印刷します。i
- 大文字と小文字が異なる文字が互いに一致するように大文字と小文字の違いを無視します。
答え3
このユーティリティの一部の実装には、バイナリを無視するフラグがgrep
あります。正規表現の代わりに大文字と小文字を区別しない一致と固定文字列の一致を使用することもできます。別に探しているなら-I
grep
-i
-F
性格-w
一部の実装の機能を使用する必要がありますgrep
。その後、サブディレクトリに再帰的に移動するには、再帰を使用してファイルを検索-R
し、パターン一致を-l
含むファイル名を取得できます。次に、特定の拡張子を持つファイルのみを表示できる--include
GNUがある場合は、それを使用したいと思います。grep
grep -Fil -IRw --include='*.txt' 'ubuntu' /path/to/top/dir
使用される標準オプション:-F
、、、-i
。-l
使用されている非標準オプション(一部の実装でサポートされてgrep
います):-w
、、、、。-I
-R
--include
のないfind
OpenBSDを代わりに使用します(GNUにもこのフラグがあります)。grep
--include
--binary-files
-I
grep
find /path/to/top/dir -type f -name '*.txt' \
-exec grep -Fil -w --binary-files=without-match 'ubuntu' {} +
答え4
これが私が一般的に使用するものです:
find /path/to/top/dir -type f -name '*.txt' -exec grep -iHI ubuntu {} \;