特定の拡張子を持つファイルで特定のテキストを見つける方法


1

.logのテキストを含む拡張子を持つすべてのファイルを検索するとしますabc

任意の拡張子を持つファイルを検索すると、次のようになります(参照:https : //unix.stackexchange.com/a/16140/38353

find / -xdev -type f -print0 | xargs -0 grep -H "abc"

.log拡張子を持つファイルのみを検索するようにこれをどのように変更できますか?

より良いコマンドを表示していただければ幸いです。

回答:


3

TL; DR

コマンドの-iname "*.log"/に追加しますfind。詳細については、manページを参照してください

より詳細な回答

当面のタスクは次のとおりです。

  1. パターンに一致するファイルをリストする *.log
  2. grep各ファイルごとに実行して、特定の文字列が含まれているかどうかを確認します。
  3. に一致するファイル名をリストします stdout

それを実現する方法の例を以下に示します。

$ find /var/log -iname "*.log" -exec grep -l 'wlan' {} \+                      

基本的に、次の3つのことが行われます。

  • findファイルを検索grepし、-exec ...{} \+ 構造内のファイル名のリストごとに呼び出すジョブを実行します。ここで{}、見つかったすべてのファイル名に置き換えられます。
  • -iname "*.log" ファイル名の大文字と小文字を区別しないマッチングを提供できます
  • -exec . . .{} \+低レベルexecve関数を呼び出し、そのgrep -l前にあるすべてのファイルのリスト(の場所{})を生成します。
  • これ\+は、execve可能な限りファイルの前にパックするために指定するオプションですgrep(制限はARG_MAX変数によって設定され、に固有execであり、Ubuntuの場合はcommand 2097152で表示できるとおりですgetconf ARG_MAX)。制限に達すると、より多くのファイルを引数としてパックしexecて呼び出しを繰り返しgrepます。\確保する必要がある+の引数として解釈されfindず、他のシェルコマンドとして。
  • -lオプションやgrepはマッチした文字列を含むファイルを示しています。-L文字列のないファイルに一致します。

ありがとう、セルグ。このコマンドは、ファイルの内容が検索されていることを示します。コンテンツを表示しない方法はありますか?ファイルのリストだけが必要だから
Askar

@oscarはい、grepの-lフラグがそれを行います。私はモバイルですので、完全な回答を投稿するのは難しいです。私はすぐに私は家だとして編集します
Sergiy Kolodyazhnyy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.