FreeBSD 9: ¿Cómo localizar un nombre de archivo exacto?

10

Intentando usar el locatecomando para encontrar una coincidencia exacta para el patrón dado. Sin embargo, resulta que muestra todos los archivos coincidentes.

Por ejemplo: quiero encontrar un binario llamado: nodo

Pero me da todas las coincidencias que contienen esta palabra:

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
Alex G
fuente

Respuestas:

10

Si nos fijamos locate --help, puede encontrar:

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

Puede usar -rpara proporcionar un patrón regexp para locate:

locate -r /node$

El /asegura se nodeencuentra al comienzo del nombre del archivo. El $asegura se nodeencuentra al final del nombre del archivo. Esto le dará solo los archivos que coinciden con el nombre exacto del archivo.

Si desea hacer una búsqueda sensible a las mayúsculas (partidos Node, NODE, nOdE, etc), añadir -i:

locate -i -r /node$

Si localizar no es compatible con regexp, puede usar grep (como lo menciona Iracicot):

locate node | grep /node$
locate -i node | grep -i /node$
ADTC
fuente
Alternativamente, puede usar el -binterruptor para que solo coincida con el nombre base:locate -br node$
Sarke
6

Puede usar grep con localizar

server2# locate node | grep node$

El signo $ le dirá a grep que mire al final de la cadena.

lracicot
fuente
1
El resultado es el mismo. Muestra diferentes coincidencias que terminan en nodo ... / usr / ports / www / p5-WebService-Linode. Supongo que debería ser / nodo $?
Alex G
Sí, puedes probar esto también (pero no estoy seguro de si el carácter / debe escapar o no). ¿Has intentado localizar -b?
lracicot
0

Deshabilite locateel globo implícito agregando su propio globo que coincida con todos los directorios:

locate */node

Desde la página del manual:

Si alguno PATTERNno contiene caracteres globales, localizar se comporta como si el patrón fuera*PATTERN*

Esta sintaxis coincidirá con un archivo completo o un nombre de directorio en cualquier lugar, incluso en la raíz.

Roger Dahl
fuente