Wordの「Ubuntu」が含まれているすべての.txtファイルをフルパスでリストするにはどうすればよいですか。非テキストファイルを無視します。値を比較するときは、大文字と小文字を区別しないでください。つまり、UBUNTU、ubuNtu、またはUbUnTuは、指定された検索フレーズと同じものとして扱われます。
GNU grepは、globパターンに基づく再帰検索をサポートしています。
grep --include='*.txt' -ril ubuntu /path/to/dir
正規表現を検索しない場合、固定文字列マッチング(-F
)を含めると、このプロセスははるかに速くなります。別の最適化は、それが必要でないことがわかっている場合は、ignore-case(-i
)を削除することです。
シンプルfind
+ grep
ソリューション:
find . -type f -name "*.txt" -exec grep -li --binary-files=without-match 'ubuntu' {} \;
grep
詳細:
l
-通常の出力を抑制します。代わりに、通常は出力が出力される各入力ファイルの名前を出力しますi
-大文字小文字の区別を無視し、大文字小文字のみが異なる文字が互いに一致するようにします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' {} +
これは私が通常使用するものです:
find /path/to/top/dir -type f -name '*.txt' -exec grep -iHI ubuntu {} \;