FreeBSD 9: Wie finde ich einen genauen Dateinamen?

4648
Alex G

Versuch, den locateBefehl zu verwenden, um eine exakte Übereinstimmung für das angegebene Muster zu finden. Es werden jedoch alle übereinstimmenden Dateien angezeigt.

Zum Beispiel: Ich möchte ein binäres Element namens node finden

Aber es gibt mir alle Übereinstimmungen, die dieses Wort enthalten:

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 
8

3 Antworten auf die Frage

8
ADTC

Wenn Sie sich das anschauen locate --help, können Sie finden:

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

Sie können verwenden -r, um ein Regex-Muster für Folgendes bereitzustellen locate:

locate -r /node$ 

Der /sichert nodeam Anfang des Dateinamens. Der $sichert nodeist am Ende des Dateinamens. Dadurch erhalten Sie nur die Dateien, die dem exakten Dateinamen entsprechen.

Wenn Sie eine Groß- und Kleinschreibung Suche machen wollen (Spiele Node, NODE, nOdE, etc.), fügt -i:

locate -i -r /node$ 

Wenn locate regexp nicht unterstützt, können Sie grep (wie von Iracicot erwähnt) verwenden:

locate node | grep /node$ locate -i node | grep -i /node$ 
Alternativ können Sie die Option -b verwenden, um nur den Basisnamen abzugleichen: `locate -br node $` Sarke vor 6 Jahren 0
6
lracicot

Sie können grep mit locate verwenden

server2# locate node | grep node$ 

Das $ -Zeichen weist grep an, am Ende der Zeichenfolge zu suchen.

Ergebnis ist das gleiche. Es werden verschiedene Übereinstimmungen angezeigt, die mit dem Knoten ... / usr / ports / www / p5-WebService-Linode enden. Ich denke es sollte / Knoten $ sein? Alex G vor 11 Jahren 1
Ja, Sie können dies auch versuchen (aber ich bin mir nicht sicher, ob das Zeichen / mit Escapezeichen versehen werden muss oder nicht). Haben Sie locate -b ausprobiert? lracicot vor 11 Jahren 0
0
Roger Dahl

Deaktivieren Sie locateden impliziten Glob, indem Sie Ihren eigenen Glob hinzufügen, der allen Verzeichnissen entspricht:

locate */node 

Aus der Manpage:

Wenn irgendeiner PATTERNkeine Globbing-Zeichen enthält, verhält sich locate so, als wäre das Muster*PATTERN*

Diese Syntax stimmt mit einem vollständigen Datei- oder Verzeichnisnamen überein, einschließlich im Stammverzeichnis.