特定のWordを含むファイルを再帰的かつ一意に一覧表示したいと思います。
例:Word 'check'のチェック、私は通常grepを行います
$ grep check * -R
しかし、このWordの出現回数が多いため、多くの出力が得られます。したがって、指定した検索ワードを含むファイル名をリストするだけです。ここではfind
とxargs
を使用したトリックで十分だと思いますが、確かではありません。
何か案は?
使用 -l
または--files-with-matches
オプションは次のように文書化されています。
通常の出力を抑制します。代わりに、通常は出力が出力される各入力ファイルの名前を出力します。スキャンは最初の一致で停止します。 (
-l
はPOSIXで指定されています。)
したがって、たとえば、次のように使用できます。
$ grep check * -lR
_find . -type f -exec grep -l check {} +
_
おそらく_-R
_オプションを使用する必要はありません。これは、GNU grep
の最新バージョンでは、ディレクトリの降順時にシンボリックリンクをたどります。_-r
_オプションを使用してください。代わりに、バージョン2.12(2012年4月)以降、シンボリックリンクを追跡しなくなりました。
GrepがGNU 1でない場合、またはバージョン2.12よりも古い場合、またはコードを最新のEdge-GNUシステムに移植できるようにする必要がある場合は、find
上記のコマンド。
それ以外の場合は、次のことができます。
_grep -rl check .
_
_*
_を使用しないでください(現在のディレクトリ(および現在のディレクトリのみ)の隠しファイルが省略され、名前が_-
_で始まるファイルで問題が発生するため)。引数は、環境によっては動作することが保証されておらず、移植性がないためです。
これを試して:
find . -type f | xargs grep -c check $1 | grep -v ":0"
grep
フラグについては...
-c
は、ファイル名の後に:と、指定したファイルに検索文字列が出現する回数を示す数値を返します。
-v
は、最初のgrep
検索からの出力を取得し、結果がゼロのファイルをフィルタリングして、結果がゼロ以外のファイルのみを出力します。
grep -lR "text-to-find" <where-to-find>
も問題なく機能します。
例:grep -lR "NAVIGATE" .
の場合、現在のディレクトリの.
にWord NAVIGATE
が見つかります。
grep -rin "whatToFind" locationToFInd
例:$ grep -rin "vihaan"。
ファイル名とそれに「vihaan」が含まれる対応する行「。」を再帰的に検索して一覧表示します。現在のディレクトリを参照します。
find . -type f | grep "keyword" *
現在のディレクトリを検索します。ルートから検索するには、/
ではなく.
を指定します