check_dns
ファイルがたくさんあり、「ファイル」で定義されている場所を見つけようとします。nagios
commands.cfg
一致検索などのタスクを実行できることはわかっていますが、可能であればインデックスのコピーであり、高速であるため、find / -name "command.cfg" -exec grep check_dns {} \;
これを使用したいと思います。locate
これを実行すると、locate commands.cfg
次のような結果が得られます。
/etc/nagios3/commands.cfg
/etc/nagiosgrapher/nagios3/commands.cfg
/usr/share/doc/nagios3-common/examples/commands.cfg
/usr/share/doc/nagios3-common/examples/template-object/commands.cfg
/usr/share/nagiosgrapher/debian/cfg/nagios3/commands.cfg
/var/lib/ucf/cache/:etc:nagiosgrapher:nagios3:commands.cfg
xargs
各結果を得るために検索を実行し、同様のインラインコマンドまたは他のものにパイプすることはできますかgrep
? forループを使用してこれを行うことができることを知っていますが、ここではbash-fu / shell-fuを理解したいと思います。この特定のケースに対して行う方法ではありません。
答え1
はい、これを使用できますxargs
。
たとえば、次のようになります。
$ locate commands.cfg | xargs grep check_dns
(grep
複数のファイルが表示されている場合は、各ファイル内で検索して一致するファイル名の印刷を有効にします。)
または、次のように明示的にファイル名の印刷を有効にすることもできます。
$ locate commands.cfg | xargs grep -H check_dns
grep
(1つのパラメータでのみ呼び出される場合xargs
)
(とは異なり)ファイル名引数のみを許可するプログラムでは、grep
次のように提供される引数の数を制限できます。
$ locate commands.cfg | xargs -n1 grep check_dns
一致する行を含むファイル名は印刷されません。
結果は次のとおりです。
$ locate commands.cfg | xargs grep -h check_dns
最新のLocate / xargsを使用すると、空白の問題も回避できます。
$ locate -0 commands.cfg | xargs -0 grep -H check_dns
(デフォルトでは、スペースは入力を区別しますxargs
。もちろん、ファイル名にスペースが含まれていると問題になります...)