찾기 명령을 사용하여 실행 파일 검색


113

find실행 파일을 검색하기 위해 어떤 유형의 매개 변수 / 플래그를 Unix 명령 과 함께 사용할 수 있습니까?


'남자 찾기'를 입력합니다. '-실행 가능'이 원하는 옵션이라고 생각합니다.
sje397 2010

3
find -executable... 그러나 이것은 나열된 모든 파일이 실제로 실행된다는 것을 보장하지는 않습니다
William

1
의 모든 구현이 find동일하게 생성되는 것은 아닙니다 . @ sje397 및 @William에서 권장하는 옵션을 사용하지 못할 수 있습니다. 아래 표시된 허용 된 솔루션 을 사용하는 것이 좋습니다 .
LS


파일 권한을 기반으로하는 아래 표시된 모든 제안을 싫어합니다. 인수 : 내 GNU 운영 체제 (Ubuntu)의 경우 예를 들어 ASCII 텍스트 파일에 대해 "x"(실행 가능) 플래그를 설정할 수 있습니다. 이 작업이 성공적으로 완료되는 것을 방해하는 모방이 없습니다. x 플래그를 지정하려면 의도하지 않은 여러 파일에 대해 작은 실수 / 버그가 필요합니다. 따라서 gniourf_gniourf의 솔루션은 개인적으로 가장 좋아하는 솔루션입니다. 그러나 크로스 컴파일 된 실행 파일의 경우 에뮬레이터 또는 대상 장치가 필요하다는 단점이 있습니다.
Na13-c 2017

답변:


173

GNU 버전의 find에서는 다음을 사용할 수 있습니다 -executable.

find . -type f -executable -print

BSD 버전의 find의 경우 -permwith +및 8 진 마스크를 사용할 수 있습니다 .

find . -type f -perm +111 -print

이 문맥에서 "+"는 "이 비트 중 하나라도 설정 됨"을 의미하고 111은 실행 비트입니다.

이것은 -executableGNU find 의 술어와 동일하지 않습니다 . 특히 -executable현재 사용자가 파일을 실행할 수 -perm +111있는지 테스트하고 실행 권한이 설정되어 있는지 테스트합니다.

이전 버전의 GNU find도 -perm +111구문을 지원 하지만 4.5.12부터이 구문은 더 이상 지원되지 않습니다. 대신을 사용 -perm /111하여이 동작을 얻을 수 있습니다 .


find: invalid mode ‘+111’findutils 4.5.11 4.fc20 오류 .
sourcejedi

1
@sourcejedi 감사합니다. 나는 실제로 비 GNU 버전의 find (특히 BSD)에 대해서만 이야기했지만 이전 버전의 GNU find는 실제로 해당 구문도 지원했습니다. 최신 버전에서는 사용해야합니다 /대신 +. 자세한 내용은 업데이트 된 답변을 참조하십시오.
Laurence Gonsalves 2014

사실, 나는 당신의 대답을 잘못 읽었습니다. 더 복잡하게 만들어서 죄송합니다 :).
sourcejedi

경우 심볼릭 링크 실행 파일도 발견해야 인클루드 -L옵션을 : find -L ....
mklement0

"실행 가능한 술어와 동일하지 않음"과 "다음 경우에만 테스트"의 의미를 이해하는 데 시간이 좀 걸렸습니다. 있는 실행 권한이 설정되어": 그것은 뜻 -perm +111얻을 수 오탐 (false positive) 현재 사용자가 실제로 실행할 수없는 즉, 파일을. 파일의 사용자 및 그룹 ID를 현재 사용자의 .NET Framework에 연결 하는 -executable것이 필요하기 때문에 권한 만 테스트 하여 에뮬레이션 할 방법이 없습니다 .
mklement0 2015 년

35

근본적인 오해를 해소 하기 위해 @ gniourf_gniourf 에게 모자의 팁 .

이 답변 은 기존 답변에 대한 개요 를 제공하고 그 미묘함상대적인 장점 을 논의하고 특히 이식성 과 관련하여 배경 정보 를 제공 하려고 시도 합니다 .

실행 가능한 파일 찾기는 두 가지 다른 사용 사례를 참조 할 수 있습니다 .

  • 사용자 중심 : 현재 사용자실행할 수있는 파일을 찾습니다 .
  • 파일 중심 : (하나 이상의) 실행 권한 비트가 설정된 파일을 찾습니다 .

에 있습니다 중 하나 의 시나리오는 감각을 만들 수 있습니다 사용하는find -L ... 대신의 find ...를 위해 또한 찾을 수 에 심볼릭 링크를 실행 .

세 가지 보안 주체 (사용자, 그룹, 기타) 모두에 대해 실행 권한 비트가 설정된 실행 파일을 찾는 가장 간단한 파일 중심 사례는 일반적으로 이지만 반드시 사용자 중심 시나리오와 동일한 결과를 산출 하지는 않습니다. 차이를 이해하는 것이 중요합니다.

사용자 중심 ( -executable)

  • 허용 대답은 commendably 한 권장 -executable경우, GNU는 find 사용할 수 있습니다.

    • GNU find는 대부분의 Linux 배포판 과 함께 제공됩니다.
      • 대조적으로, macOS를 포함한 BSD 기반 플랫폼은 덜 강력한 BSD find와 함께 제공됩니다.
    • 시나리오에서 요구 -executable하는대로 현재 사용자 가 실행할 수있는 파일 만 일치 시킵니다 (특별한 경우가 있습니다. [1] ).
  • BSD find 허용 대답 (가 제공하는 대안은 -perm +111) 대답 다른 , 파일 -centric 질문 (대답 자체가 상태로).

    • 바로 사용 -perm대답하는하는 사용자 -centric 질문 것은 불가능 필요한 것은 할 수 있기 때문에, 관련 파일의 받는 사용자 및 그룹 ID를 현재 사용자의를 하는 반면, -perm단지 테스트 할 수 있습니다 파일의 권한을. POSIX 기능
      만 사용하면 외부 유틸리티 없이는 질문에 답할 수 없습니다.find
    • 따라서 최선의 -perm방법은 (그 자체로)의 근사치 입니다 -executable. 아마도 더 가까이 근사치보다 -perm +111입니다-perm -111 이 파업 나 같은 전형적인 실제 시나리오 -, 그래서 모든 보안 사용자 (사용자, 그룹, 기타)의 실행 비트가 설정된 파일을 찾을 수 있습니다. 보너스로 POSIX와 호환됩니다 ( find -L심볼 링크를 포함 하는 데 사용 합니다. 자세한 설명은 아래 참조).

      find . -type f -perm -111  # or: find . -type f -perm -a=x
  • gniourf_gniourf의 답변 제공 의 진정한 휴대용 상당을-executable 사용하여 -exec test -x {} \;이기는하지만, 성능을 희생 .

    • 결합 -exec test -x {} \; 으로 -perm +111(즉, 가진 파일 적어도 하나의 실행 비트 세트) 그 성능 도움이 될 수 exec없습니다에 대해 호출 할 필요 모든 (다음은 BSD의 발견의 POSIX 호환 상당을 사용하여 파일 -perm +111/ GNU 찾을 -perm /111;에 대한 설명은 멀리 아래 참조) :

      find . -type f \( -perm -u=x -o -perm -g=x -o -perm -o=x \) -exec test -x {} \; -print

파일 중심 ( -perm)

  • 하기 에 응답 파일 -centric 질문에 , 그것을 이다 는 POSIX 호환 사용하기에 충분 -perm (A로 알려진 시험 GNU의 찾기 용어 참조).
    • -perm실행 가능성뿐만 아니라 모든 파일 권한 을 테스트 할 수 있습니다 .
    • 권한은 다음 중 하나로 지정됩니다. 8 진수 또는 기호 모드 . 8 진수 모드는 8 진수 (예 111:) 인 반면 기호 모드는 문자열 (예 :) a=x입니다.
    • 기호 모드 는 보안 주체를 u(사용자), g(그룹) 및 o(기타) 로 식별 하거나 a세 가지 모두를 나타냅니다. x예를 들어 권한은 실행 가능한 것으로 표현되며 연산자를 사용하여 주체에 할당됩니다 =.+-; A의 진수 모드의 포함 전체 토론, 참조 의 POSIX 사양 chmod유틸리티를 .
    • 맥락에서 find:
      • 모드에 접두사- (예 :)를 붙이는 것은 지정된 모든 권한 -ug=x을 가진 파일 일치를 의미 합니다 (하지만 일치하는 파일에는 추가 권한이있을 수 있음).
      • 접두어가755 없다는 의미 (예 :) 는이 완전하고 정확한 권한 집합 을 가진 파일과 일치 함을 의미합니다 .
      • 주의 사항 : GNU find 및 BSD find 모두 are-ANY-of-the-specified-permission-bits-set logic 으로 추가 비표준 접두사 를 구현 하지만 호환되지 않는 구문으로 수행 합니다 .
        • BSD 찾기 : +
        • GNU 찾기 : / [2]
      • 따라서 코드를 이식 가능 해야하는 경우 이러한 확장을 사용하지 마십시오 .
  • 아래 예는 다양한 파일 중심 질문에 대한 이식 가능한 답변을 보여줍니다.

파일 중심 명령 예

노트 :

  • 다음 예제는 POSIX 호환입니다 . 즉, GNU 찾기 및 BSD 찾기를 포함하여 모든 POSIX 호환 구현에서 작동해야합니다. 특히 다음이 필요합니다.
    • 비표준 모드 접두사 +또는 /.
    • 논리 연산자 기본 의 POSIX 형식 사용 :
      • !NOT (GNU 찾기 및 BSD 찾기도 허용 -not) 참고 \!예제에서 사용됩니다 않도록 보호 !쉘 히스토리 확장에서
      • -aAND 용 (GNU 찾기 및 BSD 찾기도 허용 -and)
      • -oOR 용 (GNU 찾기 및 BSD 찾기도 허용 -or)
  • 예제 사용 는 읽고 기억하기 쉽기 때문에 기호 모드를 합니다.
    • mode 접두사 -를 사용하면 =+연산자를 같은 의미로 사용할 수 있습니다 (예 : 적용하지 않는 한- -u=x와 동일).-u+x-x 나중에 하지만 그렇게 할 필요가 없습니다).
    • ,부분 모드를 결합하는 데 사용 합니다. AND 논리가 내포되어 있습니다. 예를 들어, -u=x,g=x사용자 그룹 실행 가능 비트가 모두 설정되어야 함을 의미합니다.
    • 모드는 수 자체는 "이 비트가 설정되지 않은 경우에만 일치"의 의미에서 음의 일치를 표현; -permNOT 기본과 함께 별도의 표현식을 사용해야합니다 !.
  • find의 기본 (예 : -print, 또는 -perm; GNU find에서 작업테스트 라고도 함 )은 암시 적 으로 -a(논리 AND) -o및 괄호 (로 이스케이프 됨)와 결합됩니다.\(\)쉘에 대한)을 구현 OR 논리 필요하다.
  • find -L ...대신 심볼릭 링크를find ... 일치시키기 위해 사용 됩니다. 실행 파일
    • -Lsymlink 자체 대신 symlink 의 대상 을 평가하도록 find를 지시 합니다. 따라서없이 -L, -type f모두 심볼릭 링크를 무시합니다.
# Match files that have ALL executable bits set - for ALL 3 security
# principals (u (user), g (group), o (others)) and are therefore executable
# by *anyone*.
# This is the typical case, and applies to executables in _system_ locations
# (e.g., /bin) and user-installed executables in _shared_ locations
# (e.g., /usr/local/bin), for instance. 
find -L . -type f -perm -a=x  # -a=x is the same as -ugo=x

# The POSIX-compliant equivalent of `-perm +111` from the accepted answer:
# Match files that have ANY executable bit set.
# Note the need to group the permission tests using parentheses.
find -L . -type f \( -perm -u=x -o -perm -g=x -o -perm -o=x \)

# A somewhat contrived example to demonstrate the use of a multi-principial
# mode (comma-separated clauses) and negation:
# Match files that have _both_ the user and group executable bit set, while
# also _not_ having the other executable bit set.
find -L . -type f -perm -u=x,g=x  \! -perm -o=x

[1]의 설명 -executable에서 man findGNU의로 4.4.2을 찾기 :

실행 가능한 파일과 검색 가능한 디렉토리를 찾습니다 (파일 이름 확인 의미에서). 이는 -perm 테스트가 무시하는 액세스 제어 목록 및 기타 권한 아티팩트를 고려합니다. 이 테스트는 access (2) 시스템 호출을 사용하므로 UID 매핑 (또는 루트 스 쿼싱)을 수행하는 NFS 서버가 속일 수 있습니다. 많은 시스템이 클라이언트의 커널에서 access (2)를 구현하므로 사용할 수 없기 때문입니다. 서버에 보관 된 UID 매핑 정보. 이 테스트는 access (2) 시스템 호출의 결과만을 기반으로하기 때문에이 테스트가 성공한 파일이 실제로 실행될 수 있다는 보장은 없습니다.

[2] GNU find 4.5.12 이전 버전 도 prefix를 허용 +했지만, 이것은 처음에는 더 이상 사용되지 않고 결국 제거되었습니다. 기호 모드 +와 결합 하면 정확한 권한 마스크 로 해석되어 예상치 못한 결과가 나올 가능성이 있기 때문 입니다. 경우 당신의 (a)는 버전에서 실행 하기 전에 4.5.12 (B)가 자신을 제한 진수 모드에만, 당신은 할 수 사용으로 도망 +하여 모두 GNU 찾아 BSD의 발견,하지만 그것은 좋은 생각이 아니다.


2
가장 포괄적 인 SO 대답? ;)
andynormancx

@andynormancx :) 글쎄요, 총알 포인트의 수에 관해서, 저는 이 경쟁자를 제공 할 수 있습니다 .
mklement0 dec

11

따라서 현재 사용자가 실행할 수있는 파일을 찾을 수 있는 또 다른 가능성 1 이 있습니다.

find . -type f -exec test -x {} \; -print

(여기서 테스트 명령은 PATH에서 찾은 명령이며 /usr/bin/test내장이 아닌)입니다.


1-executable 플래그를 find사용할 수없는 경우에만 사용하십시오 ! 이것은 -perm +111솔루션 과 미묘하게 다릅니다 .


2
이것은 작동하지만 꽤 느립니다. 또한, 쉘에 따라, 당신처럼, 포장 또는 파일 이름의 장소 홀더를 탈출해야 할 수도 있습니다 '{}'또는 \{\}.
Ionoclast Brigham 2014

1
@ mklement0 이것은 나처럼 -executable또는 내 명령 처럼 실행 가능한 명령을 찾지 않습니다.
gniourf_gniourf

1
감사합니다, @gniourf_gniourf-저는 거기에 몇 가지 오해가있었습니다. 나는 적어도 지금은 내 대답을 삭제하고 있기 때문에 여기에 귀하의 다른 의견을 다시 인쇄하고 있습니다 (아마도 부활 될 것 입니다 . 구할 수있는 것이 있다면) : " find . -type f -perm -u=x는 다음 과 동일 하지 않습니다 . 내가 적절한 그룹에 속해 있거나 . 실제로 사용자가 실행할 수없는 많은 파일을 찾고 해당 사용자가 실행할 수있는 파일을 놓칠 것입니다. " -executable-executableg+xo+x-perm -u=x
mklement0

1
@IonoclastBrigham : {}인용을해야하는 것은 가상의 필요성 이지만 실제로는 POSIX와 같은 쉘과 csh. 이 어디에 당신은 껍질을 아십니까 되어 필요?
mklement0

4
@IonoclastBrigham : 흥미 롭습니다. 감사합니다. 그래서,에 fish, {}정말 하나 같이 이스케이프해야합니다 '{}'\{\}. 그 주 bash, kshzsh중괄호 확장 같은 종류의를 제공한다; 그러나, 그들은 인용되지 않은 토큰을 인쇄하지 {} 이기 때문에 (따라서 및 : 탈출에 대한 필요성을), 그들은 그것을 고려하지 않기 때문에 유효 중괄호 식을 (그들은 적어도 필요 2 , 토큰, 또는 유효한 숫자 시퀀스 표현) 반면 fish 하다고 유효 중괄호 문자열이 되는 표현식입니다 . {}
mklement0

9

-executable테스트 플래그를 사용할 수 있습니다 .

-executable
              Matches files which are executable  and  directories  which  are
              searchable  (in  a file name resolution sense).

4
-executable은 아마도 알려지지 않은 옵션입니다.
실제로 실제로

4
GNU Find 확장이 될까요? 태그는 Linux가 아니라 Unix이므로 최소한 GNU 확장은 이와 같이 문서화되어야합니다.
Jonathan Leffler

3
이 옵션은 최소한 OS X에서 발견 된 BSD find 명령에서 지원되지 않습니다. 이것은 GNU 확장이지만 다른 find 버전에서 지원 될 수 있습니다.
Ionoclast Brigham

FWIW, 나는 이것이 sles 10에 있지 않지만 sles> = 11에 있음을 발견했습니다 (조금 불타 버렸습니다)
Peter Turner

이것이 실제로 모든 예제를 얻는 것은 아닙니다. 내 경우에는 내가 같이가 소유 한 파일을 가지고 -rw-r-xr-x있는 -executable감지하지 않습니다
Dezza

2

이것은 나를 위해 일했고 공유를 생각했습니다 ...

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

13
단지 수천 개의 케이스 만 더 있고, 당신은 재창조 할 것입니다 file!
tripleee 2013

@tripleee +1. : 쿨이 확장 될 것이다find ./ -mime application/x-sharedlib -o -mime application/x-dosexec
다니엘 알더

@Daniel Alder, 어떤 버전을 사용합니까? find (GNU findutils) 4.4.2에서 -mime 옵션을 찾지 못했습니다.
AjayKumarBasuthkar

@tripleee +1. 'file'& / 'mimetype'을 활용하는 것이 좋은 생각이거나 -mime을 지원하는 버전을 찾는 것이 더 낫습니다. 또한 'file'/ 'mimetype'에 실행 파일 만 필터링하고 표시하는 옵션이 있는지 궁금합니다.
AjayKumarBasuthkar

2
find . -executable -type f

실제로 파일이 실행 가능하다는 것을 보장하지 않고 실행 비트가 설정된 파일을 찾습니다. 만약 당신이

chmod a+x image.jpg

위의 발견은 image.jpg가 실제로 실행 비트가 설정된 jpeg 이미지라도 실행 가능하다고 생각합니다.

나는 일반적으로 이것으로 문제를 해결합니다.

find . -type f -executable -exec file {} \; | grep -wE "executable|shared object|ELF|script|a\.out|ASCII text"

찾기에서 실행 파일에 대한 돔 정보를 실제로 인쇄하려면 다음과 같이 할 수 있습니다.

find . -type f -executable -printf "%i.%D %s %m %U %G %C@ %p" 2>/dev/null |while read LINE
do
  NAME=$(awk '{print $NF}' <<< $LINE)
  file -b $NAME |grep -qEw "executable|shared object|ELF|script|a\.out|ASCII text" && echo $LINE
done

위의 예에서 파일의 전체 경로 이름은 마지막 필드에 있으며 파일 이름이 다른 곳에있는 경우 awk "NAME = $ (awk '{print $ NF}'<<< $ LINE)"을 사용하여 찾는 위치를 반영해야합니다. "NF"를 올바른 숫자 위치로 바꾸는 데 필요한 출력 문자열 찾기. 구분 기호가 공백이 아닌 경우 구분 기호가 무엇인지 awk에 알려야합니다.


1

이것이 불가능에 가까운 것은 말할 것도없고 매우 쉬운 일이 아니라는 것은 너무 어리석은 일 입니다 . 손 들어, 나는 Apple / Spotlight를 연기한다 ...

mdfind 'kMDItemContentType=public.unix-executable'

적어도 작동합니다!


mdfindOSX 에 대해 알아두면 좋습니다 . uour 명령은 전체 시스템에 대한 Unix 실행 파일을보고 합니다 . mdfind -onlyin . 'kMDItemContentType=public.unix-executable'결과를 현재 디렉토리의 하위 트리로 제한합니다. 사소한 관심 지점 : 검색을 특정 디렉토리 (하위 폴더없이)로만 제한하는 것은 분명히 지원되지 않습니다. 실행 파일에 대한 심볼릭 링크 는 분명히 포함되지 않습니다. 흥미롭게도 mdfind실행 가능한 파일을 찾으면 이후 에 실행 가능한 비트를 제거 하는 것은 선택 되지 않습니다 .
mklement0 2015 년

Spotlight가 실행 가능한 Unix 파일을 감지 / 검출하는 방법에서 버그를 발견했다고 생각합니다. Apple과 openradar.me/20162683 에도 버그를 신고했습니다 . 나는 당신을 격려 - 그리고 다른 사람이이 기능에 관심이 -도에서 버그에서 버그를 파일에 bugreport.apple.com
mklement0

(죄송합니다 코멘트 날리고에 대한 희망, 그들은 지금 정확한 것) mdfind -onlyin . 'kMDItemContentType=public.unix-executable'과 같은 동작합니다 find . -type f -perm +111 -print않습니다. 즉, 함께 파일을 발견입니다 어느 얻을 수 있습니다 실행 비트 세트, 가양 성 (즉, 실제로 문제가되지 않을 수도 있지만) - 진정 단지에 의해 실행 파일을 찾을 수에 현재 사용자 , BSD 찾기를 사용하여 @ gniourf_gniourf의 답변을 참조하십시오. find기반 솔루션을 사용하면 실행 파일에 대한 심볼릭 링크도 찾을 수 있다는 장점이 있습니다 (옵션 -L) mdfind.
mklement0 2015 년

1
@ mklement0 내 대답은 꾸밈을 피했습니다 -요점을 집으로 잡으려고 시도했지만 그렇습니다.이 양식을 거의 사용하지 않을 것입니다. 다른 옵션 -하지 않도록 경우의 올 - 인 좋은 오래된 대체 (globbing)가 ... ls /Applications/**/*(*)에 (내?) zsh
알렉스 그레이

유용한 zsh팁을 주셔서 감사합니다 -몰랐습니다. ( 실행 파일 ( ) 또는 심볼릭 링크 ( ) 중 하나 와 일치 할 수 있지만 둘 다 일치 하지는 않는 것 같습니다 .) 원래 요점에 관해서는 : 다시 말씀 드리겠습니다 . 더 많은 유연성을 제공하면서 명령 이 수행하는 작업을 수행 합니다. POSIX를 준수하도록 재구성 할 수도 있습니다. *@find . -type f -perm +a=xmdfind
mklement0 2015 년

1

쉬운 대답은 "실행 파일이 PATH 변수에 포함 된 디렉토리에 있습니다."이지만 실제로는 실행 파일을 찾지 못하며 어쨌든 많은 실행 파일을 놓칠 수 있습니다.

나는 Mac에 대해 잘 모르지만 "mdfind 'kMDItemContentType = public.unix-executable'"이 해석 된 스크립트와 같은 것을 놓칠 수 있다고 생각합니다.

실행 가능한 비트가 설정된 파일을 찾는 것이 괜찮다면 (실제로 실행 가능한지 여부에 관계없이) 다음을 수행하는 것이 좋습니다.

find . -type f -perm +111 -print

지원되는 경우 "-executable"옵션은 acl 및 기타 권한 아티팩트를 보는 추가 필터를 만들지 만 기술적으로는 "-pemr +111"과 크게 다르지 않습니다.

아마도 앞으로 find는 "-magic"을 지원할 것이고 특정 매직 ID를 가진 파일을 명시 적으로 찾을 수있게 해줄 것입니다.하지만 그런 다음 모든 실행 가능한 형식 magic id를 정밀하게 지정해야합니다.

나는 유닉스에서 기술적으로 올바른 쉬운 방법을 알지 못합니다.


1

따라서 실행 권한이있는 파일뿐만 아니라 실행 파일 유형 (예 : 스크립트, ELF 바이너리 등)을 실제로 찾고자한다면 다음과 같은 작업을 수행하고 싶을 것입니다 (현재 디렉토리. 원하는 디렉토리) :

 gfind . -type f -exec bash -c '[[ $(file -b "'{}'") == *" executable "* ]] ' \; -print

또는 macports (리눅스 사용자)를 사용하지 않거나 원하는대로 gnu find를 설치 한 경우 :

 find . -type f -exec bash -c '[[ $(file -b "'{}'") == *" executable "* ]] ' \; -print

OS X를 사용하는 경우 기본적으로 작은 테스트를 번들로 제공하는 is_exec라는 어딘가에 숨겨진 유틸리티가 제공되므로 찾으면 명령 줄을 줄일 수 있습니다. 그러나이 방법은 == test를 = ~ test로 쉽게 바꾸고 실행 가능한 일반 텍스트 파일이나 파일 명령이 반환하는 다른 정보와 같은 더 복잡한 속성을 확인하는 데 사용할 수 있으므로 더 유연합니다.


여기 인용에 대한 정확한 규칙은 매우 불투명하므로 시행 착오를 거쳐 결국 작업을 끝내지 만 올바른 설명을 듣고 싶습니다.


0

나는 같은 문제가 있었고 그 대답은 dmenu 소스 코드 에있었습니다. 그 목적을 위해 만들어진 stest 유틸리티입니다. 'stest.c'및 'arg.h'파일을 컴파일하면 작동합니다. 편의를 위해 거기에 넣은 사용법에 대한 man 페이지가 있습니다.

STEST(1)         General Commands Manual         STEST(1)

NAME
       stest - filter a list of files by properties

SYNOPSIS
       stest  [-abcdefghlpqrsuwx]  [-n  file]  [-o  file]
       [file...]

DESCRIPTION
       stest takes a list of files  and  filters  by  the
       files'  properties,  analogous  to test(1).  Files
       which pass all tests are printed to stdout. If  no
       files are given, stest reads files from stdin.

OPTIONS
       -a     Test hidden files.

       -b     Test that files are block specials.

       -c     Test that files are character specials.

       -d     Test that files are directories.

       -e     Test that files exist.

       -f     Test that files are regular files.

       -g     Test  that  files  have  their set-group-ID
              flag set.

       -h     Test that files are symbolic links.

       -l     Test the contents of a directory  given  as
              an argument.

       -n file
              Test that files are newer than file.

       -o file
              Test that files are older than file.

       -p     Test that files are named pipes.

       -q     No  files are printed, only the exit status
              is returned.

       -r     Test that files are readable.

       -s     Test that files are not empty.

       -u     Test that files have their set-user-ID flag
              set.

       -v     Invert  the  sense  of  tests, only failing
              files pass.

       -w     Test that files are writable.

       -x     Test that files are executable.

EXIT STATUS
       0      At least one file passed all tests.

       1      No files passed all tests.

       2      An error occurred.

SEE ALSO
       dmenu(1), test(1)

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