“찾기 | grep | awk”는 비참하게 실패한다


0

서버에서 모든 셸 스크립트를 검색하고 있으며 다음 명령 으로이 작업을 수행합니다.

find / -type f -exec file --mime-type {} \; | grep "text/x-shellscript"

이것은 잘 작동하며 다음은 샘플 출력입니다.

/lib/udev/hwclock-set: text/x-shellscript
/lib/init/bootclean.sh: text/x-shellscript
/etc/network/if-up.d/openssh-server: text/x-shellscript
/etc/network/if-up.d/mountnfs: text/x-shellscript

이제 파일 이름으로 작업하고 이것을 위해 awk를 사용하려고합니다.

find / -type f -exec file --mime-type {} \; | grep "text/x-shellscript" | awk -F: '{ print $1 }'

그러나 이것은 출력을 생성하지 않습니다. 나는 파이프 등을 리디렉션하려고 시도했지만 여기 벽에 부딪쳤다.

아무도 내가 뭘 잘못하고 있는지 알고 있습니까?


어떻게됩니까 echo "/etc/network/if-up.d/mountnfs: text/x-shellscript" | awk -F: '{ print $1 }'?
— 다니엘 벡

@DanielBeck 작동합니다. 아마도 find가 stdout에 쓰지 않습니까? 하지만 난 ... 그 부분을 수행하는 방법을 그렙 설명 할 수
— 개는 고양이 세계 먹고

오류 출력을 표준 출력으로 리디렉션 할 수 있습니다. 그러면 여러분의 명령은 다음과 같습니다 :find / -type f -exec file --meta-type {} \; | grep "text/x-shellscript" 2>&1 | awk -F: '{ print $1 }'
— Daniel Beck

@DanielBeck 아니오, 도움이되지 않습니다. "find / -type f -exec 파일 --mime-type {} \; | grep"text / x-shellscript "2> & 1 1> this_file_should_not_be_empty"를 시도했지만 grep이 아무데도 출력되지 않는 것 같습니다! 파이프 리디렉션없이 텍스트가 모니터에 표시되는 경우에도 마찬가지입니다.
— 개 고양이 세계 먹고

쓸데없는 사용을grep 제거하여 문제의 위치를 ​​좁히고 문제의 태그 중 하나를 제거 할 수 있습니다 .
— JdeBP

답변:


2

이 시도:

  find / -type f -exec file --meta-type {} \; | grep "text/x-shellscript" | cut -d: -f 1

고마워, 이것은 작동합니다. AWK하지 않는 이유하지만 난 여전히 궁금
— 개는 고양이 세계 먹고

당신의 awk 명령은 여기서 잘 작동하지만 아무런 문제가 없습니다. 이 파이프를 다른 명령 (백틱 등)에 포함시키는 경우 내가 생각할 수있는 유일한 차이점은 awk 명령에 사용하는 작은 따옴표입니다.
— haimg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.