特定の単語を含むファイルを再帰的に一意にリストしたいと思います。
はい:「チェック」という言葉をチェックしてください。私が主にすることはgrepです。
$ grep check * -R
ところで言葉が何度も出てくるから出力がたくさん出てきますね。したがって、特定のクエリを含むファイル名のみを一覧表示するだけです。私はfind
いくつかのトリックを使用して処理するだけでxargs
十分だろうと思いますが、わかりません。
どんなアイデアがありますか?
答え1
-l
または、オプションを使用して--files-with-matches
次のように記録します。
通常の出力を抑制します。代わりに、印刷は通常、各入力ファイルの名前を印刷します。検索は最初の一致で停止します。 (
-l
POSIXで指定)
したがって、あなたの例では、次のものを使用できます。
$ grep check * -lR
答え2
find . -type f -exec grep -l check {} +
ディレクトリを下げるときにシンボリックリンクオプションに従うために-R
最新バージョンのGNUを使用したくないかもしれません。バージョン2.12(2012年4月)以降、シンボリックリンクに従わないgrep
このオプションを使用してください。-r
grepバージョンがGNUでない、2.12より前であるか、コードをリードしていないGNUシステムに移植する必要がある場合は、上記のfind
コマンドを使用してください。
それ以外の場合は、次のようにできます。
grep -rl check .
使用しないでください*
(これは現在のディレクトリ(および現在のディレクトリのみ)の隠しファイルを無視し、名前で始まるファイルに問題を引き起こす可能性があるため-
)、環境によっては動作が保証されないため、引数の後にオプションを渡さないでください。そしてポータブルではありません。
答え3
この試み:
find . -type f | xargs grep -c check $1 | grep -v ":0"
grep
旗の場合..
-c
ファイル名と : およびそのファイルに検索文字列が表示される回数を示す数値が返されます。
-v
最初の検索結果を取得し、結果がゼロのgrep
ファイルをフィルタリングし、結果がゼロ以外のファイルのみを印刷します。
答え4
grep -rin "whatToFind" locationToFINd
たとえば、 $grep -rin "vihaan" です。
「vihaan」、「.」を含むファイル名とその行が繰り返し検索され、一覧表示されます。現在のディレクトリを表します。