FreeBSD 9: Wie finde ich einen genauen Dateinamen?

10

Es wird versucht, mit dem locateBefehl eine genaue Übereinstimmung für das angegebene Muster zu finden. Es werden jedoch alle übereinstimmenden Dateien angezeigt.

Zum Beispiel: Ich möchte eine Binärdatei mit dem Namen: 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
Alex G.
quelle

Antworten:

10

Wenn Sie sich ansehen locate --help, finden Sie möglicherweise:

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

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

locate -r /node$

Das /stellt sicher, dass nodeam Anfang des Dateinamens steht. Das $stellt sicher, dass nodeam Ende des Dateinamens steht. Dadurch erhalten Sie nur die Dateien, die dem genauen Dateinamen entsprechen.

Wenn Sie eine Groß- und Kleinschreibung Suche machen wollen (Streichhölzer Node, NODE, nOdE, etc.), fügen -i:

locate -i -r /node$

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

locate node | grep /node$
locate -i node | grep -i /node$
ADTC
quelle
Alternativ können Sie den -bSchalter verwenden, um nur mit dem Basisnamen abzugleichen:locate -br node$
Sarke
6

Sie können grep mit find verwenden

server2# locate node | grep node$

Das $ -Zeichen weist grep an, das Ende der Zeichenfolge zu betrachten.

lracicot
quelle
1
Ergebnis ist das gleiche. Es werden verschiedene Übereinstimmungen angezeigt, die mit dem Knoten ... / usr / ports / www / p5-WebService-Linode enden. Ich denke es sollte / node $ sein?
Alex G
Ja, Sie können dies auch versuchen (aber ich bin nicht sicher, ob das Zeichen / maskiert werden muss oder nicht). Haben Sie versucht, -b zu finden?
Lracicot
0

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

locate */node

Von der Manpage:

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

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

Roger Dahl
quelle