.logのテキストを含む拡張子を持つすべてのファイルを検索するとしますabc。
任意の拡張子を持つファイルを検索すると、次のようになります(参照:https : //unix.stackexchange.com/a/16140/38353)
find / -xdev -type f -print0 | xargs -0 grep -H "abc"
.log拡張子を持つファイルのみを検索するようにこれをどのように変更できますか?
より良いコマンドを表示していただければ幸いです。
.logのテキストを含む拡張子を持つすべてのファイルを検索するとしますabc。
任意の拡張子を持つファイルを検索すると、次のようになります(参照:https : //unix.stackexchange.com/a/16140/38353)
find / -xdev -type f -print0 | xargs -0 grep -H "abc"
.log拡張子を持つファイルのみを検索するようにこれをどのように変更できますか?
より良いコマンドを表示していただければ幸いです。
回答:
TL; DR
コマンドの-iname "*.log"後/に追加しますfind。詳細については、manページを参照してください
より詳細な回答
当面のタスクは次のとおりです。
*.loggrep各ファイルごとに実行して、特定の文字列が含まれているかどうかを確認します。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文字列のないファイルに一致します。