ฉันจะใช้คำสั่งค้นหาภายในไดเรกทอรีที่ระบุได้อย่างไร


16

ฉันใช้locateคำสั่งบน Linux การใช้งานปัจจุบันของฉันค้นหาผ่านระบบไฟล์ทั้งหมด ฉันแค่อยากให้มันค้นหาในสารบบเฉพาะ ฉันจะทำสิ่งนี้ได้อย่างไร


TLDR: นี่คือนามแฝงของเทอร์มินัลเพื่อทำการlocateค้นหาภายในไดเรกทอรีที่ระบุ: alias my_locate="updatedb -U /path/to/yourdir -o /path/to/your_dir_locate.db; locate -d /path/to/dir_locate.db " เมื่อนามแฝงนั้นมีผลบังคับใช้กับประเภทเทอร์มินัลmy_locate *foo*และคุณออกไปแข่ง คุณสามารถเชื่อมต่อการอัพเดตฐานข้อมูลและค้นหาตำแหน่งโดยใช้อักขระโคลอนเพื่อเชื่อมฐานข้อมูล rtfm: linux.die.net/man/8/updatedb
Eric Leschinski

คำตอบ:


11

อีกวิธีคือการใช้การจับคู่รูปแบบในlocate:

locate '/some/directory/*filename*'

เปรียบเทียบเอาต์พุตของคำสั่งด้านล่าง:

$ locate tmpfile
/usr/lib64/perl5/auto/POSIX/tmpfile.al
/usr/share/man/fr/man3/tmpfile.3.gz
/usr/share/man/ja/man3/tmpfile.3.gz
/usr/share/man/man3/tmpfile.3.gz
/usr/share/man/man3p/tmpfile.3p.gz
$
$ locate '/usr/lib64/*tmpfile*'
/usr/lib64/perl5/auto/POSIX/tmpfile.al
$ 

locate /usr/lib*tmpfile* ให้ผลลัพธ์เหมือนกัน


3
+1 นี่คือคำตอบที่ถูกต้อง โปรดทราบว่าถ้าคุณใส่สัญลักษณ์แทนขอบเขตจะคงที่ นั่นคือในตัวอย่างข้างต้น$ locate '/usr/lib64/*tmpfile'จะไม่ส่งคืนผลลัพธ์
xofer

ถ้าคุณต้องการควบคุมมากกว่าสัญลักษณ์ที่เรียบง่ายสามารถนำเสนอคุณสามารถเสมอท่อผลของการผ่านlocate grep
Ladadadada

5

สร้างฐานข้อมูล slocate สำหรับไดเรกทอรีเฉพาะของคุณด้วย:

updatedb -U /path/to/directory

และค้นหาด้วย:

locate <search_string>

UPDATE

ใช้งานได้ดีกับระบบ Gentoo ของฉัน แต่ CentOS ไม่มี-Uตัวเลือก ดังนั้นคุณสามารถลองด้านล่างแทน:

สร้างฐานข้อมูลด้วย:

# updatedb -U /path/to/dir -o dir_locate.db

และค้นหา:

# locate -d dir_locate.db <search_string>

3
"ค้นหา -U" ส่งข้อผิดพลาดตัวเลือกที่ไม่ถูกต้อง ... คาดเดาว่าคุณหมายถึง "updatedb -U" หรือไม่ นอกจากนี้โปรดทราบว่าสิ่งนี้ต้องการการสร้างใหม่ mlocate.db (updatedb) หากคุณต้องการค้นหาไดเรกทอรีอื่น
gharper

โอ้ใน Gentoo ของฉันมันใช้งานได้ดี แต่ CentOS ไม่มีตัวเลือกนี้
quanta

ลงคะแนนไหม คุณช่วยแสดงความคิดเห็นได้ไหม?
quanta

หากคุณมีข้อผิดพลาดที่ชอบ: updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permittedตรวจสอบวิธีการใช้คำสั่ง updatedb เป็นผู้ใช้สามัญบน linux
kenorb

2

คำตอบที่ง่ายที่สุดที่ฉันคิดได้คือ

locate search_term | grep "/specified/directory"

ทางออกที่ดีกว่าอาจใช้ "ค้นหา" และตัวเลือกเส้นทาง ...


0

วิธีที่ง่ายที่สุดคือในตัวอย่างต่อไปนี้:

updatedb -o ~/tmp.db -l0 -U $PWD
locate   -d ~/tmp.db "foo"

เปลี่ยน$PWDเป็นไดเรกทอรีเฉพาะของคุณ

ตัวอย่างข้างต้นจะสร้างฐานข้อมูลท้องถิ่นของคุณสำหรับไดเรกทอรีที่ระบุเท่านั้น

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