FreeBSD 9: Como localizar um nome de arquivo exato?

FreeBSD 9: Como localizar um nome de arquivo exato?

Tentando usar locateo comando para encontrar uma correspondência exata para o padrão fornecido. No entanto, resulta mostrando todos os arquivos correspondentes.

Por exemplo: quero encontrar um binário chamado:

Mas isso me dá todas as correspondências que contêm esta palavra:

server2# locate node
/usr/share/man/man9/getnewvnode.9.gz
/usr/share/man/man9/ieee80211_amrr_node_init.9.gz
/usr/share/man/man9/ieee80211_dump_node.9.gz
/usr/share/man/man9/ieee80211_dump_nodes.9.gz
/usr/share/man/man9/ieee80211_find_rxnode.9.gz
/usr/share/man/man9/ieee80211_find_rxnode_withkey.9.gz
/usr/share/man/man9/ieee80211_free_node.9.gz

Responder1

Se você olhar locate --help, poderá encontrar:

  -r, --regexp REGEXP    search for basic regexp REGEXP instead of patterns
      --regex            patterns are extended regexps

Você pode usar -rpara fornecer um padrão regexp para locate:

locate -r /node$

A /garantia nodeestá no início do nome do arquivo. A $garantia nodeestá no final do nome do arquivo. Isto lhe daráapenasos arquivos que correspondem ao nome exato do arquivo.

Se você quiser fazer uma pesquisa sem distinção entre maiúsculas e minúsculas (correspondências Node, NODE, nOdE, etc), adicione -i:

locate -i -r /node$

Se o local não suportar regexp, você poderá usar grep (conforme mencionado por Iracicot):

locate node | grep /node$
locate -i node | grep -i /node$

Responder2

Você pode usar grep com localizar

server2# locate node | grep node$

O sinal $ dirá ao grep para olhar o final da string.

Responder3

Desative locateo glob implícito adicionando seu próprio glob que corresponda a todos os diretórios:

locate */node

Na página de manual:

Se any PATTERNnão contiver caracteres globais, o local se comportará como se o padrão fosse*PATTERN*

Esta sintaxe corresponderá a um nome completo de arquivo ou diretório em qualquer lugar, inclusive na raiz.

informação relacionada