"찾기"를 사용하여 실행 파일만 찾는 방법은 무엇입니까?

"찾기"를 사용하여 실행 파일만 찾는 방법은 무엇입니까?

locate gtags이라는 이름의 모든 파일을 찾습니다 gtags.

실행 파일만 필요한 경우 어떻게 해야 합니까? 이를 수행할 수 있는 방법이 있습니까?

답변1

쉬운 일이 아닙니다. 당신은 그것을 사용할 수 있습니다

locate bash | while IFS= read -r line; do [[ -x "$line" ]] && echo $line; done

이름에 가 포함된 모든 실행 파일을 찾습니다 bash. 이는 find몇 개의 파일만 확인하면 되므로 전체 파일 시스템을 사용하는 것보다 빠릅니다.


  • locate bash항상 하는 일을 수행합니다(일치하는 항목 모두 나열).
  • |(파이프)는 첫 번째 명령( )의 출력을 가져 locate와서 두 번째 명령(줄의 나머지 부분)으로 보냅니다.
  • 루프는 while ...; do ... done파이프(에서)로부터 locate수신된 각 행을 반복합니다.
  • read -r line입력 라인을 읽고 이를 line(이 경우 경로/파일 이름)이라는 변수 에 저장합니다.
  • [[ -x "$line" ]]파일이 $line실행 가능한지 테스트
  • 그렇다면 && echo $line위젯은 이를 화면에 인쇄합니다.

답변2

가장 빠르고 저렴한 솔루션:

locate -b '\gtags' | xargs -ri find {} -prune -type f -executable

xargs매뉴얼 페이지 에 따르면 위 구문은 발견된 모든 파일 이름을 지정된 파일만 확인하는 locate단일 실행으로 전달합니다.find

이 솔루션은 다음과 같은 이유로 이전에 제공된 솔루션보다 낫습니다.

  • find루트 디렉터리부터 시작하여 시스템의 모든 파일을 검색하는 짧은 명령일 수 있지만 실행하는 데 시간이 오래 걸릴 수 있습니다 .
  • 쉘 while 루프를 사용하여 각 파일 이름을 확인하는 것은 각 파일을 한 번에 하나씩 확인하기 때문에 속도가 느려질 수 있습니다.

다른 사람들이 이전 답변에 제공된 매개 변수에 대한 자세한 설명을 요청했기 때문에 세부 사항은 다음과 같습니다.

  • locate(바라보다:통화 위치 찾기 - 파일 찾기)
    • -b: 경로 이름의 디렉터리 이름에 관계없이 지정된 패턴을 가진 경로 이름의 기본 파일 이름만 일치합니다.
    • \: 백슬래시는 와일드카드이므로 locate패턴이 gtags고려되지 않습니다 *gtags*. 즉, 앞뒤에 다른 문자가 없고 정확한 이름이 'gtags'인 파일을 찾습니다.
  • xargs(바라보다:xargs 옵션 - 파일 찾기)
    • -r: 표준 입력이 완전히 비어 있으면 명령이 실행되지 않습니다.
    • -i: {}다음 명령을 표준 입력에서 읽은 파일 이름 목록으로 바꿉니다.
  • find(바라보다:마스터 인덱스 찾기 - 파일 찾기)
    • {}xargs: 표준 입력에서 받은 모든 파일의 이름 으로 바꿉니다 . 이러한 모든 파일은 다음 표현식과 일치하는 항목을 검색하며, 파일 중 하나라도 디렉터리인 경우 해당 내용도 확인합니다.locatefind
    • -prune: 평가 중인 파일 이름이 디렉터리에 속해 있으면 해당 내용을 검색하지 마세요.
    • -type f: 장치, 명명된 파이프 등과 같은 특수 파일 이름이 아닌 "일반" 파일인 파일 이름만 출력에 포함합니다.
    • -executable: 출력에는 실행 파일의 파일 이름만 포함됩니다. 즉, 파일 내용에 관계없이 하나 이상의 실행 모드 비트가 설정됩니다.

즉, locate일치하는 파일의 이름을 표준 출력으로 인쇄하고, 이는 |표준 입력으로 파이프( 사용) 됩니다 xargs. xargs표준 입력에서 파일 이름을 읽고 단일 문자열의 공백으로 구분된 목록으로 결합합니다. 문자열이 비어 있지 않으면 명령을 실행하기 전에 명령의 문자열을 바꿉니다 xargs.{}find

답변3

짧은 대답은 GNU 찾기를 사용하십시오.

find / -type f -executable -name '*gtags*'

관련 정보