"찾기" 명령의 결과에 따라 조치를 취하는 방법은 무엇입니까?

"찾기" 명령의 결과에 따라 조치를 취하는 방법은 무엇입니까?

check_dns파일이 많은데 '파일'에 정의된 위치를 찾으려고 합니다 .nagioscommands.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. 물론 파일 이름에 공백이 포함되어 있으면 문제가 됩니다...)

관련 정보