FreeBSD 9: ค้นหาชื่อไฟล์อย่างไร?


10

พยายามใช้locateคำสั่งเพื่อค้นหาการจับคู่ที่ตรงกันสำหรับรูปแบบที่กำหนด อย่างไรก็ตามผลลัพธ์แสดงไฟล์ที่ตรงกันทั้งหมด ..

ตัวอย่างเช่น: ฉันต้องการค้นหาไบนารีชื่อ: node

แต่มันทำให้การแข่งขันทั้งหมดที่มีคำนี้:

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

คำตอบ:


10

หากคุณดูlocate --helpคุณอาจพบว่า:

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

คุณสามารถใช้-rเพื่อให้รูปแบบ regexp เพื่อlocate:

locate -r /node$

การ/ทำให้มั่นใจได้ว่าnodeเป็นจุดเริ่มต้นของชื่อไฟล์ $มั่นใจnodeเป็นที่สิ้นสุดของชื่อไฟล์ นี่จะให้เฉพาะไฟล์ที่ตรงกับชื่อไฟล์ที่แน่นอน

ถ้าคุณต้องการที่จะค้นหากรณีตาย (ไม้ขีดไฟNode, NODE, nOdEฯลฯ ), เพิ่ม-i:

locate -i -r /node$

หากการค้นหาไม่รองรับ regexp คุณสามารถใช้ grep (ตามที่ Iracicot กล่าวไว้):

locate node | grep /node$
locate -i node | grep -i /node$

หรือคุณสามารถใช้-bสวิตช์เพื่อจับคู่กับชื่อฐานเท่านั้น:locate -br node$
Sarke

6

คุณสามารถใช้ grep พร้อมระบุตำแหน่ง

server2# locate node | grep node$

เครื่องหมาย $ จะบอก grep ให้ดูที่ส่วนท้ายของสตริง


1
ผลลัพธ์เหมือนกัน มันแสดงให้เห็นถึงการแข่งขันที่แตกต่างกันลงท้ายด้วยโหนด ... / usr / ports / www / p5-WebService-Linode ฉันเดาว่ามันควรจะเป็น / node $?
Alex G

ใช่คุณสามารถลองได้เช่นกัน (แต่ฉันไม่แน่ใจว่าตัวอักษร / ต้องหนีหรือไม่) คุณเคยลองหา -b แล้วหรือยัง?
lracicot

0

ปิดใช้งานlocateglob โดยนัยโดยการเพิ่ม glob ของคุณเองที่ตรงกับไดเรกทอรีทั้งหมด:

locate */node

จากหน้าคน:

หากPATTERNไม่มีอักขระที่มีการวนรอบให้ระบุตำแหน่งการทำงานเหมือนกับว่าเป็นรูปแบบ*PATTERN*

ไวยากรณ์นี้จะจับคู่ไฟล์หรือชื่อไดเรกทอรีที่สมบูรณ์ได้ทุกที่รวมถึงในรูท

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.