現在のディレクトリ(またはサブディレクトリ)のすべてのファイルを調べて、特定の単語が含まれている場合にのみファイル名を返します。"find"特定の内容[Linux]
もっと詳しく:
型のF -nameを見つける "*ハロー*" 私に "hello" を名前に持つすべてのファイル名を与えます。しかし、その代わりに、私はファイルを検索し、そのファイルの内容に "hello"が含まれていればファイルの名前を表示したいと思っています。
これにアプローチする方法はありますか?
現在のディレクトリ(またはサブディレクトリ)のすべてのファイルを調べて、特定の単語が含まれている場合にのみファイル名を返します。"find"特定の内容[Linux]
もっと詳しく:
型のF -nameを見つける "*ハロー*" 私に "hello" を名前に持つすべてのファイル名を与えます。しかし、その代わりに、私はファイルを検索し、そのファイルの内容に "hello"が含まれていればファイルの名前を表示したいと思っています。
これにアプローチする方法はありますか?
あなたはこれはそれがfind
から返されるなど、多くのファイルにできるだけ多くgrep
インスタンスを起動しないような方法で効率的である
find /path -type f -exec grep -Hi 'hello' {} +
としてGNU find
とGNU grep
を使用することができます。これは、find
が検索するためにgrep
の一連のファイルを返すという根本的な前提で動作します。ファイルはフールプルーフの方法として、使用できないことがありますかどうかが不明な場合はパイプで連結されたコマンドは結果を返した場合にのみ、あなたはその場合にxargs
を次のコマンドが実行され、-r
フラグでxargs
を使用することができます
find /path -type f | xargs -r0 grep -Hi 'hello'
ありがとうございました!しかし、最初の例では、{} +は正確に何をしていますか? –
'-exec command {} +'セクションとhttp:// wwwセクションのこの[manページの検索](http://man7.org/linux/man-pages/man1/find.1.html)をお読みください。 .softpanorama.org/Tools/Find/using_exec_option_and_xargs_in_find.shtml。私は文字通り説明のためにこれらのページから引用します:) – Inian
'find-type f -exec grep -l hello {} +'または[silver sarcher]をインストールしてください(https://github.com/ggreer/the_silver_searcher) – ymonad