2017-12-27 8 views
0

나는 최적의 해결책을 찾기 위해 다소 흥미로운 문제가있다. 나는 이맥스 (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 
(I 파일 및 디렉토리를 구별 할 수 있어야합니다) 찾기 위해이 개 더 많은 통화를 만들기 위해 이들 각 디렉토리를 사용

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

답변

0

find 맨 페이지를보고 있는데, -printf을 사용했습니다.

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

내가 필요한 모든 것을 제공합니다. 하나의 명령 만이 파일과 디렉토리를 구별하고 깊이를 검색합니다.