FreeBSD 9: Comment localiser un nom de fichier exact?

10

Essayer d'utiliser la locatecommande pour trouver une correspondance exacte pour le modèle donné. Cependant, il résulte montrant tous les fichiers correspondants ..

Par exemple: je veux trouver un binaire nommé: node

Mais cela me donne toutes les correspondances contenant ce mot:

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
la source

Réponses:

10

Si vous regardez locate --help, vous pouvez trouver:

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

Vous pouvez utiliser -rpour fournir un modèle d'expression régulière pour locate:

locate -r /node$

L' /assure se nodetrouve au début du nom de fichier. L' $assure se nodetrouve à la fin du nom de fichier. Cela vous donnera uniquement les fichiers correspondant au nom de fichier exact.

Si vous voulez faire une recherche insensible à la casse (allumettes Node, NODE, nOdE, etc.), ajouter -i:

locate -i -r /node$

Si Locate ne prend pas en charge l'expression rationnelle, vous pouvez utiliser grep (comme mentionné par Iracicot):

locate node | grep /node$
locate -i node | grep -i /node$
ADTC
la source
Alternativement, vous pouvez utiliser le -bcommutateur pour faire correspondre uniquement avec le nom de base:locate -br node$
Sarke
6

Vous pouvez utiliser grep avec Locate

server2# locate node | grep node$

Le signe $ indiquera à grep de regarder la fin de la chaîne.

lracicot
la source
1
Le résultat est le même. Il affiche différentes correspondances se terminant par node ... / usr / ports / www / p5-WebService-Linode. Je suppose que ce devrait être / node $?
Alex G
Oui, vous pouvez essayer aussi (mais je ne sais pas si le caractère / doit être échappé ou non). Avez-vous essayé de localiser -b?
lracicot
0

Désactivez locatele glob implicite en ajoutant votre propre glob qui correspond à tous les répertoires:

locate */node

Depuis la page de manuel:

Si aucun PATTERNne contient de caractères globbing, localiser se comporte comme si le motif était*PATTERN*

Cette syntaxe correspondra à un nom de fichier ou de répertoire complet n'importe où, y compris à la racine.

Roger Dahl
la source