FreeBSD 9: Bagaimana cara mencari nama file yang tepat?

10

Mencoba menggunakan locateperintah untuk menemukan kecocokan tepat untuk pola yang diberikan. Namun hasilnya menunjukkan semua file yang cocok ..

Sebagai contoh: Saya ingin mencari biner bernama: node

Tapi itu memberi saya semua kecocokan yang mengandung kata ini:

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
sumber

Jawaban:

10

Jika Anda melihat locate --help, Anda mungkin menemukan:

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

Anda dapat menggunakan -runtuk menyediakan pola regexp ke locate:

locate -r /node$

The /Memastikan nodeadalah pada awal nama file. The $Memastikan nodeadalah pada akhir nama file. Ini akan memberi Anda hanya file yang cocok dengan nama file yang tepat.

Jika Anda ingin melakukan pencarian case-insensitive (pertandingan Node, NODE, nOdE, dll), tambahkan -i:

locate -i -r /node$

Jika locat tidak mendukung regexp, Anda dapat menggunakan grep (seperti yang disebutkan oleh Iracicot):

locate node | grep /node$
locate -i node | grep -i /node$
ADTC
sumber
Atau, Anda dapat menggunakan -bsakelar untuk hanya mencocokkan dengan nama samaran:locate -br node$
Sarke
6

Anda dapat menggunakan grep dengan loc

server2# locate node | grep node$

Tanda $ akan memberi tahu grep untuk melihat bagian akhir dari string.

lracicot
sumber
1
Hasilnya sama. Ini menampilkan berbagai pertandingan yang berakhir dengan simpul ... / usr / ports / www / p5-WebService-Linode. Saya kira itu seharusnya / simpul $?
Alex G
Ya, Anda juga dapat mencoba ini (Tapi saya tidak yakin apakah karakternya harus diloloskan atau tidak). Sudahkah Anda mencoba mencari -b?
lracicot
0

Nonaktifkan locateglob implisit dengan menambahkan glob Anda sendiri yang cocok dengan semua direktori:

locate */node

Dari halaman manual:

Jika ada yang PATTERNtidak mengandung karakter globbing, cari berperilaku seolah-olah polanya*PATTERN*

Sintaks ini akan cocok dengan file lengkap atau nama direktori di mana saja, termasuk di root.

Roger Dahl
sumber