많은 텍스트 파일이 포함된 디렉터리 트리가 있습니다. 모든 파일을 빠르게 검색할 수 있도록 이러한 모든 파일의 전체 텍스트(특정 파일 확장자를 가진 파일은 무시)를 색인화하고 싶습니다.
전체 홈 디렉토리나 전체 시스템을 색인화하고 싶지 않습니다. 이 특정 디렉토리만 색인화하고 싶습니다.
인덱스는 지속적으로 업데이트되어 내부 파일의 변경 사항을 자동으로 감지해야 합니다.
이를 달성하기 위해 어떤 도구를 사용할 수 있습니까?
답변1
"파일의 변경 사항을 자동으로 감지"해야 한다는 요구 사항 외에도 GNU에서는 이를 수행할 수 있습니다.id-utils. 이는 쿼리 도구 및 기타 도구에서 사용 mkid
하도록 호출되는 이진 데이터베이스 파일을 구축하는 도구를 제공합니다 .ID
lid
Id-utils는 프로그래밍 지향적이며 구성 가능한 파일을 기반으로 하는 id-lang.map
접미사로 파일 유형을 식별합니다 . 파일의 토큰을 올바르게 처리하기 위해 지원하는 각 유형에 대해 별도의 스캐너가 있습니다. mkid
인식할 수 없는 파일 형식에 대한 대체 스캐너로 사용할 수 있는 텍스트 파일용 대체 스캐너가 있습니다 . mkid
빈 id-lang.map
파일을 직접 가리키면 텍스트 스캐너를 사용하여 모든 것을 처리할 것이라고 생각합니다 .
mkid
인덱스 트리는 매우 빠르며 쿼리는 매우 빠릅니다.
소스 코드 탐색을 위해 Vim과 통합했습니다. cscope와 같은 별도의 도구를 사용하는 것보다 더 편리합니다. 다음 두 가지 설정을 사용합니다.
:set grepprg=lid\ --regex\ --result=grep\ '$*'\ \\\|\ sort\ -u\ -t\ :\ -k\ 1,1\ -k\ 2,2n
:set grepformat=%f:%l:%m
Vim 명령의 기초로 ID 데이터베이스를 사용할 수 있습니다 :grep
. 예를 들어, 발견된 :grep foo
모든 위치의 탐색 가능한 목록 이 표시됩니다 .foo
sort
일치 항목이 흥미로운 순서로 출력되므로 위 정의의 단계가 grepprg
필요합니다 . lid
내부적으로 해싱이나 기타 작업을 수행합니다.