터미널의 폴더 내 모든 실행 파일 찾기


19

myfolder거대한 파일 / 폴더 계층 구조를 포함 하는 폴더 가 있습니다.
이 폴더 내에서 모든 실행 파일을 찾는 방법은 무엇입니까?

우분투에서는 다음과 같이 작동합니다. find . -executable -type f

그러나 Mac OS X Mavericks (도 사용 bash)는 그것을 얻지 못합니다.

find: -executable: unknown primary or operator

답변:


30

실행 가능한 비트가 설정된 모든 파일 (심볼릭 링크 아님)을 찾습니다.

find . -perm +111 -type f

이것은 또한 심볼릭 링크 찾을 것입니다 (종종 똑같이 중요합니다)

find . -perm +111 -type f -or -type l

명확하지 않은 경우 명령이 작동하는 방법은 다음과 같습니다.

  • find 분명히 찾기 프로그램입니다 (:
  • .( .= 현재 디렉토리) 에서 찾기 시작할 디렉토리를 나타냅니다.
  • -perm +111= 실행 가능한 비트가 설정되어 있음 ( +"이 비트 중 하나"를 의미 함, 111소유자, 그룹 및 모든 사람의 실행 가능한 비트의 8 진수 임)
  • -type f유형이 파일 임을 의미
  • -or 부울 OR
  • -type l유형이 기호 링크 임을 의미합니다.

2
-L대신 호출로 -or -type l인해 링크 자체가 아닌 링크 된 파일의 통계를 반환하도록 할 수 있습니다 . statfind
Ian C.

이 방법으로 찾은 문제는 모든 파일이 실행 권한을 가질 수 있다는 것입니다. 예를 들어 Windows에서 일부 텍스트 파일을 다운로드하면 권한이 엉망이됩니다.
Ivan Z. Xiao

5

나는 Ian의 대답을 할 수 없었지만 (10.6.8), 다음은 예상 결과를 보여주었습니다.

find . -type f -perm +0111 -print

업데이트 수정

이것은 잘 작동하는 것 같습니다!

find . -type f -perm +ugo+x -print

"x"는 사용자 / 그룹 / 다른 지정자가 없으면 의미가 없다고 생각합니다.


상징적 구문은 새로운 것이어야합니다. 지적 해 주셔서 감사합니다. 8 진수를 사용하고 이전 OS X 버전과 호환됩니다.
Ian C.

이상하게도, 10.6 맨 페이지의 해당 섹션은 인용 한 것과 정확히 동일합니다. 위의 답변을 수정했습니다.
Kent

2
결론 : BDS 명령 구문이 이상합니다.
Ian C.

3

에서 OS X에서 발견에 대한 man 페이지 :

 -perm [-|+]mode
         The mode may be either symbolic (see chmod(1)) or an octal number.  If the mode is symbolic, a
         starting value of zero is assumed and the mode sets or clears permissions without regard to the
         process' file mode creation mask.  If the mode is octal, only bits 07777 (S_ISUID | S_ISGID |
         S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) of the file's mode bits participate in the comparison.
         If the mode is preceded by a dash (``-''), this primary evaluates to true if at least all of
         the bits in the mode are set in the file's mode bits.  If the mode is preceded by a plus
         (``+''), this primary evaluates to true if any of the bits in the mode are set in the file's
         mode bits.  Otherwise, this primary evaluates to true if the bits in the mode exactly match the
         file's mode bits.  Note, the first character of a symbolic mode may not be a dash (``-'').

따라서 다음이 필요합니다.

find . -type f -perm +0111 -print

OS X는 Linux 기반이 아닌 BSD 기반 이므로 Linux 배포판에서 사용되는 Gnu 명령 은 OS X의 명령 find과 반드시 ​​같을 필요는 없습니다. 셸 차이는 운영 체제 / 운영 체제 유틸리티 도구의 차이입니다.


1

아주 오래된 질문입니다. 알고 있지만 솔루션을 검색하면 더 나은 답변을 찾을 수 있습니다.

"find"를 사용할 때의 주요 문제점은이 속성이 실행 불가능한 파일에 대해 설정되어 있어도 실행 파일로 설정된 속성에 의존한다는 것입니다.

MacOS에는 file파일 정보를 표시 하는 편리한 작은 명령 줄 도구 " "가 제공됩니다. 예를 들면 다음과 같습니다.

$> file *

Distribution:             directory
SomeFile.icns:            Mac OS X icon, 3272878 bytes, "ic09" type
MyPicture.png:            PNG image data, 1024 x 1024, 8-bit/color RGBA, non-interlaced
NSHelpers.pas:            Algol 68 source text, ASCII text
myProgram:                Mach-O 64-bit executable x86_64

보시다시피, 'MyProgram'은 실행 파일이며 잘 표시되어 있습니다. 이전 32 비트 실행 파일에도 "실행 가능"이라는 문구가 있으므로 다음은 모든 실제 실행 파일 (바이너리)을 나열해야합니다.

file * | grep "executable"

이것이 동일한 질문에 대한 답변을 찾는 누군가에게 유용 할 수 있기를 바랍니다.

참고 : file하위 디렉토리를 통해 재귀하는 기능이없는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.