2012-02-21 4 views
3

모든 실행 파일을/bin에서 찾아야합니다. 사용 방법현재 디렉토리에서 실행 파일을 찾고 확장자를 찾는 방법은 무엇입니까?

find . -executable 

및 파일이 스크립트 (예 : sh, pl, bash)인지 확인하는 방법은 무엇입니까?

+0

이 하위 디렉토리를 걸러 당신의 find 명령에'타입 f'를 추가 모든 공유 라이브러리를 찾을 수 있습니다. –

+0

/bin에 실행 파일이 아닌 파일이 있습니까? – uzsolt

답변

4
#!/bin/bash                                      

for file in `find /bin` ; do                                 
    if [ -x $file ] ; then                                  
     file $file                                    
    fi                                       
done 

심지어 더 나은

find /bin -type f -perm +111 -print0 | xargs -0 file 
1

find /bin/ -executable/bin/ 디렉토리의 모든 실행 파일을 반환합니다.

필터링 확장에는 -name 플래그가 사용 가능합니다. 예를 들어, find /bin/ -executable -name "*.sh"sh - 스크립트를 반환합니다.

UPD :

파일이 바이너리 파일이 아닙니다 및 shabang에서 그것의 유형을 파악하기 위해 확장이없는, 그것은 가능합니다.

예를 들어 find ~/bin/ -executable | xargs grep --files-with-matches '#!/bin/bash'#!/bin/bash을 포함하는 ~/bin/ 디렉토리의 파일을 반환합니다.

+0

감사합니다. 그러나 파일에 확장명이없는 경우 스크립트 유형을 결정하는 방법은 무엇입니까? – DmitryB

+2

'#!/bin/bash'를 그 리핑하면 위양성이 있지만/bin/sh를 사용하는 파일은 누락 될 수 있습니다. 'file' 명령을 사용하여 파일의 실행 가능한 종류를 파악하는 것이 더 낫습니다. – Kenster

+0

맞아요, shabang grepping은'file' 응답으로 다소 엉성한 것입니다. 고마워. 고마워. –

0
이 나를 위해 일한 공유의 & 생각

할 ...

find ./ -type f -name "*" -exec sh -c ' 
    case "$(head -n 1 "$1")" in 
     ?ELF*) exit 0;; 
     MZ*) exit 0;; 
     #!*/ocamlrun*)exit0;; 
    esac 
exit 1 
' sh {} \; -print 
1

는 스크립트가 쉘 모두 찾으려면

find . -type f -executable | xargs file -i | grep x-shellscript | cut -d":" -f1 

모든 실행 파일을 찾으려면

find . -type f -executable | xargs file -i | grep x-exec | cut -d":" -f1 

find . -type f -executable | xargs file -i | grep x-sharedlib | cut -d":" -f1 
관련 문제