.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ページを参照してください
より詳細な回答
当面のタスクは次のとおりです。
*.log
grep
各ファイルごとに実行して、特定の文字列が含まれているかどうかを確認します。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
文字列のないファイルに一致します。