Como posso usar localizar apenas para um diretório

10

Isso localiza um grande número de arquivos que estão em vários subdiretórios do "Dropnot"

$ locate Dropnot

Posso encontrar apenas o local do diretório locate? (em que diretório "Dropnot" está)

Portanto, se Dropnotestiver dentro /home/me/, essa é a única entrada retornada.

Se sim, qual é a maneira mais simples / mais curta?

De preferência através de uma bandeira ou símbolo, em vez de passar por eles, etc., mas eu usaria qualquer coisa como opção.

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

Michael Durrant
fonte

Respostas:

5

Não existe uma opção para locateencontrar o tipo de arquivo selecionado (como 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 -eopção localizar para ativar a expressão regular POSIX.

Nesse caso, você deve usar:

locate -e Dropnot$

É importante que versão do localizador você possui. No meu sistema (Gentoo Linux) eu tenho o Secure Locate:

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

em que não há --basenameopção da utherresposta. Esta opção é fornecida pelo GNU Locate do pacote findutils:

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

Se você deseja usar o regexp com o GNU Locate, use -rswitch -e.

pbm
fonte
11
não é a -eopção only print entries for currently existing files?
phuclv
10

Eu mlocateinstalei. É o padrão distribuído pelo RedHat, portanto estará no Fedora, RHEL, CentOS. Deman 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 somente reportará arquivos ou diretórios exatamente com essa string.

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.
George M
fonte
locate -b /Dropnottrabalhou
Michael Durrant
4

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

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

Quando não há caractere curinga no argumento, locateprocura um caminho com o termo de pesquisa especificado como uma substring. Quando o argumento é um padrão de shell que contém um ou mais caracteres curinga, locateprocura uma correspondência completa. Se você não deseja exibir o /Dropnotno final:

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'
Gilles 'SO- parar de ser mau'
fonte
0

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

Jistanidiot
fonte
0

O Slackware usa slocatepor padrão, que possui uma pesquisa regex com a opção r :

locate -r '/Dropnot$'

procurará por diretórios nomeados Dropnot.

Isso iria procurar por exemplo, para numeradas serão exigidos apenas Dropnotdiretórios (Dropnot1, Dropnot2, etc.):

locate -r '/Dropnot[[:digit:]]\+$'
Skippy le Grand Gourou
fonte
0

Não sei por que ninguém propôs algo assim:

for i in $(locate MYDIR); do [ -d "$i" ] && echo $i; done

Isso apenas verifica se alguma das strings de localização é um diretório e a imprime

cy8g3n
fonte