>

최적의 해결책을 찾으려고하는 다소 흥미로운 문제가 있습니다. Emacs 용 파일 자동 완성 백엔드를 작성 중입니다. 이것은 내가 리눅스 find 를 사용하고 있음을 의미합니다  파일과 디렉토리를 얻는 명령입니다.

백엔드에는 부분적으로 완성 된 경로가있는 파일이 제공됩니다 (예 : /usr/folder/foo ) 아래 두 디렉토리의 부분 경로와 일치 할 수있는 모든 파일과 디렉토리를 가져오고 싶습니다 (예 : foo_bar/ 를 제공 할 수 있음) foo_bar/bar foo_bar/baz foo_bar/bat/   foo_baz ). 지금까지 나는 이것을 3 단계로 나누었습니다.

현재 디렉토리에서 접두사와 일치 할 수있는 모든 파일을 찾습니다

find foo* -type f -maxdepth 1

찾을 수있는 가능한 모든 디렉토리를 수집하십시오

find foo* -type d -maxdepth 1

이러한 각 디렉토리를 사용하여 찾기 위해 두 번 더 호출하십시오 (파일과 디렉토리를 구별 할 수 있어야 함)

find foo_bar/ -type d -maxdepth 1
find foo_bar/ -type f -maxdepth 1

이 솔루션은 find 에 대한많은전화를 수반합니다.  (특히 일치하는 모든 디렉토리에 대해 마지막 단계를 호출해야하기 때문에). 이것은 특히 큰 파일 시스템에서 후보를 느리게 만듭니다. 이상적으로는 모든 후보자를 얻기 위해하나만 호출하고 싶습니다. 그러나 나는 그것을하는 좋은 방법을 찾지 못했습니다. 누구든지 최적의 솔루션을 알고 있습니까?

  • 답변 # 1

    find 를 통해 보이는

     맨 페이지, 나는 -printf 를 사용하여 끝났습니다. .

    find -L foo* -maxdepth 1 -printf '%p\t%y\n'
    
    

    나에게 필요한 모든 것을 제공합니다 하나의 명령으로 파일과 디렉토리, 검색 깊이 등을 구분합니다.

  • 이전 html - 부트 스트랩 4 축소 된 탐색 모음 브랜드가 중앙에 있지 않음
  • 다음 javascript - 새 탭에서 PDF 데이터 객체 열기