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
. 물론 파일 이름에 공백이 포함되어 있으면 문제가 됩니다...)