Como posso usar o locate apenas para um diretório

9

Isso encontra um grande número de arquivos que estão sob vários subdiretórios de "Dropnot"

$ locate Dropnot

Posso encontrar apenas a localização do diretório com locate ? (em qual diretório "Dropnot" está)

Então, se Dropnot estiver em /home/me/ , essa é a única entrada retornada.

Se sim, qual é o caminho mais simples / mais curto?

Preferencialmente, por meio de um sinalizador ou símbolo, em vez de sair e grampear, etc., mas eu aceito qualquer coisa como uma opção.

Talvez algum tipo de Dropnot $ para o final da linha? (mas não funcionou).

    
por Michael Durrant 04.06.2012 / 20:34

5 respostas

5

Não há opção para usar locate para localizar o tipo de arquivo selecionado (como o diretório), mas você pode usar a sintaxe da sua pergunta - Dropnot$ para encontrar linhas que terminem com Dropnot . Para isso, você deve usar a opção -e para localizar a expressão regular POSIX.

Nesse caso, você deve usar:

locate -e Dropnot$

É importante a versão do seu site. No meu sistema (Gentoo Linux) tenho Secure Locate:

$ locate --version
Secure Locate 3.1 - Released March 7, 2006

em que não há --basename da resposta de uther . Esta opção é fornecida pelo pacote GNU Locate from findutils:

$ ./locate --version
locate (GNU findutils) 4.4.2

Se você quiser usar o regexp com o GNU Locate, você deve usar -r em vez de -e .

    
por 04.06.2012 / 20:47
9

Eu tenho mlocate instalado. É o padrão distribuído pelo RedHat, então será no Fedora, RHEL, CentOS. De man 1 locate

-b, --basename
       Match  only  the  base  name  against the specified patterns. This 
       is the opposite of --wholename.

Portanto, se você executar locate -b '\Dropknot' , ele relatará apenas arquivos ou diretórios com exatamente essa cadeia de caracteres.

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.
    
por 04.06.2012 / 20:46
3

Com o GNU locate (outras implementações de localização podem ser diferentes):

locate '*/Dropnot'
locate Dropnot | grep '/Dropnot$'

Quando não houver nenhum caractere curinga no argumento, locate procurará um caminho com o termo de pesquisa especificado como substring. Quando o argumento é um padrão de shell contendo um ou mais caracteres curinga, locate procura uma correspondência completa. Se você não quiser produzir o /Dropnot no final:

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'
    
por 05.06.2012 / 01:30
0

Se você está no RedHat, provavelmente você instalou o mlocate, não o Secure Locate. Nesse caso, não há opção -e e você tem que usar -r ou --regexp para pesquisar usando expressões regulares básicas.

    
por 11.07.2016 / 15:37
0

O Slackware usa slocate por padrão, que tem uma pesquisa de regex com a opção r :

locate -r '/Dropnot$'

irá procurar diretórios chamados Dropnot .

Isso procuraria por exemplo para diretórios numerados -only Dropnot (Dropnot1, Dropnot2, etc.):

locate -r '/Dropnot[[:digit:]]\+$'
    
por 17.10.2018 / 14:16