locate를 사용하여 디렉토리 찾기


20

내가 사용하는 위치 , 내가 이름을 알고있는 파일을 찾기 위해 모든 시간을 찾을 매우 빠르고, 나는 그것을 사랑 해요. 최근에 만든 파일의 경우 찾기 가 훌륭합니다. 일반적으로 최근에 만든 파일이 있으면 기본적으로 파일이 만들어진 위치를 알고 있으므로 전체 파일 시스템을 검색 할 필요가 없습니다.

디렉토리의 위치를 ​​잊어 버렸을 때 찾지도 찾을 수 없습니다.

디렉토리 내의 모든 파일은 또한 찾기와 일치하기 때문에 찾기는 항상 너무 많은 정보를 뱉어냅니다. 예를 들어, 파일 시스템 어딘가에 log라는 이름의 디렉토리를 검색하는 경우 find log 는 수많은 결과를 반환합니다. find 와 동일한 작업을 수행하면 find / -name log -type d find를 실행하는 데 몇 분이 걸리고 읽을 수없는 폴더가 발생할 때마다 모든 종류의 권한 오류가 발생합니다.

더 좋은 방법이 있습니까?

답 : 그래서 다른 것을 찾을 때까지 grep을 고수합니다.

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

답변:


12

방법 (더 나은 방법이있을 것입니다)은 grep을 사용하여 폴더 이름으로 끝나는 경로 만 반환하는 것입니다.

locate foldername | grep /foldername$

28

다음의 옵션 --regex( -r)을 사용할 수 있습니다 locate.

locate -r '/log$'

예 (+1). locate자체 내장 정규식 기능이 있습니다 : -r또는 --regex... 옵션의 전체 범위는 다음을 참조하십시오 : info locate
Peter.O

1
더 좋은 방법이 있어야한다는 것을 알았습니다!
misterben

짧고 원활하게 작동합니다. 큰 기여! 정규 표현
해야하는

'이 경우 두 가지가 필요하지 않습니다 locate -r /log$. 충분합니다.
simlev

5

시도해 보셨습니까?

locate /home/insertusernamehere/*/filename?

또는

locate file | grep -i '^/home/.*/examplesubdirectory'?

또는 그러한 변형이 있습니까?


이 답변은 grep필요하지 않으며, 첫 번째 제안 옵션에서 볼 수 있듯이 정규 표현식이 아닙니다.
Tom

2

여기있어

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

1
변경 한 내용을 설명 할 수 있으면 다른 내용에도 도움이됩니다.
Ron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.