ฉันใช้locate
คำสั่งบน Linux การใช้งานปัจจุบันของฉันค้นหาผ่านระบบไฟล์ทั้งหมด ฉันแค่อยากให้มันค้นหาในสารบบเฉพาะ ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันใช้locate
คำสั่งบน Linux การใช้งานปัจจุบันของฉันค้นหาผ่านระบบไฟล์ทั้งหมด ฉันแค่อยากให้มันค้นหาในสารบบเฉพาะ ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
อีกวิธีคือการใช้การจับคู่รูปแบบใน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*
ให้ผลลัพธ์เหมือนกัน
$ locate '/usr/lib64/*tmpfile'
จะไม่ส่งคืนผลลัพธ์
locate
grep
สร้างฐานข้อมูล 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>
updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permitted
ตรวจสอบวิธีการใช้คำสั่ง updatedb เป็นผู้ใช้สามัญบน linux
คำตอบที่ง่ายที่สุดที่ฉันคิดได้คือ
locate search_term | grep "/specified/directory"
ทางออกที่ดีกว่าอาจใช้ "ค้นหา" และตัวเลือกเส้นทาง ...
วิธีที่ง่ายที่สุดคือในตัวอย่างต่อไปนี้:
updatedb -o ~/tmp.db -l0 -U $PWD
locate -d ~/tmp.db "foo"
เปลี่ยน$PWD
เป็นไดเรกทอรีเฉพาะของคุณ
ตัวอย่างข้างต้นจะสร้างฐานข้อมูลท้องถิ่นของคุณสำหรับไดเรกทอรีที่ระบุเท่านั้น
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