유닉스 시스템에서 "파일 형식"은 일반 파일, 디렉토리, 명명 된 파이프, 문자 특수 파일, 심볼릭 링크 등 입니다. 옵션으로 find
필터링 할 수 있는 파일 형식입니다 -type
.
이 find
유틸리티는 "쉘 스크립트", "JPEG 이미지 파일"또는 다른 유형의 일반 파일 을 자체적으로 구별 할 수 없습니다 . 그러나 이러한 유형의 데이터는 file
파일 자체 내에서 특정 서명을 확인하여 유형을 결정 하는 유틸리티 로 구별 될 수 있습니다 .
데이터 파일의 서로 다른 유형의 레이블을하는 일반적인 방법은 것입니다 MIME 타입 및 file
파일의 MIME 타입을 결정할 수있다.
file
with find
를 사용 하여 MIME 유형의 일반 파일을 감지하고이를 사용하여 쉘 스크립트 만 찾으십시오.
find . -type f -exec sh -c '
case $( file -bi "$1" ) in
*/x-shellscript*) exit 0
esac
exit 1' sh {} ';' -print
또는, 사용 bash
,
find . -type f \
-exec bash -c '[[ "$( file -bi "$1" )" == */x-shellscript* ]]' bash {} ';' \
-print
해당 이름의 스크립트 만 감지하려면 -name sunrise
앞에 추가하십시오 -exec
.
find
위 의 명령은 현재 디렉토리 내에서 또는 아래에서 모든 일반 파일을 찾을 수 있으며 이러한 각 파일에 대해 짧은 인라인 쉘 스크립트를 호출합니다. 이 스크립트는 file -bi
찾은 파일에서 실행되며 해당 명령의 출력에 문자열이 포함되어 있으면 종료 상태없이 종료됩니다 /x-shellscript
. 출력에 해당 문자열이 없으면 0이 아닌 종료 상태로 종료 find
되어 다음 파일로 즉시 계속됩니다. 파일이 쉘 스크립트 인 것으로 발견되면 find
명령은 파일의 경로 이름 ( -print
끝 부분에 다른 조치로 대체 될 수 있음)을 출력합니다.
이 file -bi
명령은 파일의 MIME 유형을 출력합니다. Linux (및 대부분의 다른 시스템)의 쉘 스크립트의 경우 다음과 같습니다.
text/x-shellscript; charset=us-ascii
약간 오래된 file
유틸리티 버전이있는 시스템에서는
application/x-shellscript
공통 비트는 /x-shellscript
부분 문자열입니다.
맥 OS에서 사용해야합니다 file -bI
대신 file -bi
때문에 이유 합니다 ( -i
옵션은 상당히 다른 무언가를). macOS의 출력은 Linux 시스템의 출력과 유사합니다.
찾은 각 쉘 스크립트에 대해 사용자 정의 조치를 수행하고 싶습니까? 위 의 명령 -exec
대신 다른 스크립트를 사용하여 수행 할 수도 있지만 수행 할 수도 있습니다-print
find
find . -type f -exec sh -c '
for pathname do
case $( file -bi "$pathname" ) in
*/x-shellscript*) ;;
*) continue
esac
# some code here that acts on "$pathname"
done' sh {} +
또는,와 bash
,
find . -type f -exec bash -c '
for pathname do
[[ "$( file -bi "$pathname" )" != */x-shellscript* ]] && continue
# some code here that acts on "$pathname"
done' bash {} +
관련 :
--filetype
find 명령 또는 파일 유형을 알려주는 다른 옵션 은 없습니다 . bash 스크립트를 찾거나 Perl 스크립트 또는 그 줄을 따라 무언가를 찾고 있다면 사용--exec file {} \;
하고 파이프로 연결하십시오.grep Bourne
grep Perl