Usando o locate para encontrar um diretório

20

Eu uso localizar todo o tempo para encontrar arquivos que eu conheço o nome, localizar é muito rápido e eu amo isso. Para arquivos recentemente criados, o find é ótimo, normalmente com arquivos criados recentemente Eu sei onde basicamente eles foram criados, então eu não tenho que procurar em todo o meu sistema de arquivos.

Quando esqueci a localização de um diretório, nem encontrar nem localizar parece ideal.

O Locate sempre exibe informações demais porque cada arquivo dentro de um diretório também é compatível com o locate. Por exemplo, se eu estivesse procurando um diretório chamado log em algum lugar no meu sistema de arquivos, locate log retornaria toneladas e toneladas de resultados. Se eu fizer a mesma coisa com find, localizar / -name log -type d localizar leva minutos para ser executado e expulsa todos os tipos de erros de permissão sempre que encontrar uma pasta que não possa ler.

Existe uma maneira melhor?

Resposta: Então, eu fico com o grep até encontrar outra coisa:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate [email protected] | grep "${last}$"
    else
        locate [email protected] | grep "/${last}$"
    fi
}
    
por Michael 27.11.2010 / 22:49

4 respostas

12

Uma maneira (eu suspeito que pode haver uma maneira melhor) é usar o grep para retornar apenas os caminhos que terminam com o nome da sua pasta:

locate foldername | grep /foldername$
    
por misterben 27.11.2010 / 23:08
28

Você pode usar a opção --regex ( -r ) de locate :

locate -r '/log$'
    
por Florian Diesch 28.11.2010 / 00:31
5

Você já tentou:

locate /home/insertusernamehere/*/filename ?

ou

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

ou qualquer variação de tal?

    
por RolandiXor 27.11.2010 / 23:02
2

Aqui está

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

locatedir $*
    
por Linuxuser 12.06.2015 / 13:27

Tags