2016-09-29 5 views
0

現在のディレクトリ(またはサブディレクトリ)のすべてのファイルを調べて、特定の単語が含まれている場合にのみファイル名を返します。"find"特定の内容[Linux]

もっと詳しく:

型のF -nameを見つける "*ハロー*" 私に "hello" を名前に持つすべてのファイル名を与えます。しかし、その代わりに、私はファイルを検索し、そのファイルの内容に "hello"が含まれていればファイルの名前を表示したいと思っています。

これにアプローチする方法はありますか?

+0

'find-type f -exec grep -l hello {} +'または[silver sarcher]をインストールしてください(https://github.com/ggreer/the_silver_searcher) – ymonad

答えて

1

あなたはこれはそれが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' 
+0

ありがとうございました!しかし、最初の例では、{} +は正確に何をしていますか? –

+0

'-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

関連する問題