มีวิธีเพิ่มความเร็ว `find 'หรือไม่


15

ฉันสงสัยว่ามีวิธีเพิ่มfindความเร็วในเทอร์มินัลไม่สมเหตุสมผลว่าการใช้อินเทอร์เน็ต google เพื่อค้นหาจะมีความเร็วที่ดีกว่าการค้นหาสตริงหรือชื่อไฟล์ในเครื่อง

ฉันสงสัยว่ามีวิธีใดที่จะมีฐานการจัดทำดัชนีในท้องถิ่นเมื่อสร้างขึ้นในอนาคตคำสั่ง find อาจเร็วมาก

หรือข้อเสนอแนะอื่น ๆ ?

ขอบคุณ!


คุณสามารถแก้ไขโพสต์ด้วยระบบปฏิบัติการและ / หรือการกระจายของคุณได้หรือไม่?
โจดี้ C

คำตอบ:


15

ลองใช้locateมันควรทำในสิ่งที่คุณต้องการ


13
มันเป็นความคิดที่ดีที่จะตอบคำถามออกไปอีกหน่อย ชอบพูดถึงสิ่งที่แพคเกจlocateมาจาก (ปกติslocate) และใช้updatedbสำหรับการสร้างฐานข้อมูลใหม่ :-)
Patrick

1
สิ่งนี้ไม่ทำงานสำหรับพาร์ติชันที่ปิดการทำดัชนี เช่นพาร์ติชัน NTFS ประสบปัญหาประสิทธิภาพการทำงานที่ไม่ดีหากเปิดใช้งานการจัดทำดัชนีดังนั้นการค้นหาจะไม่ทำงานสำหรับสิ่งที่ "ควร"
ojrask

9

ขึ้นอยู่กับเกณฑ์การค้นหาของคุณ

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

แต่ด้วยการค้นหาคุณสามารถค้นหาขนาดไฟล์อายุไฟล์และสิ่งอื่น ๆ ซึ่งไม่สามารถค้นหาได้โดยการค้นหา

หากคุณทราบตำแหน่งที่จะค้นหาคุณสามารถใช้เส้นทางเพื่อกำหนดขอบเขตการค้นหา:

find /some/path -size -10M -size +2M -mtime -365 ...

จะค้นหาเฉพาะไฟล์ตั้งแต่ 2 ถึง 10 M ซึ่งมีอายุสูงสุด 1 ปีใน / บางส่วน / พา ธ

โปรแกรมที่มีอยู่ในพา ธ สามารถค้นหาได้โดยใช้ไฟล์วิธีใช้ lib และการกำหนดค่าด้วย whereis ตัวอย่าง:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz

7

ใช้ locate

เหตุผลก็คือlocateใช้ฐานข้อมูลของไดเรกทอรีและไฟล์ที่มีอยู่ทั้งหมดที่สร้างขึ้นแล้วเหมือนที่คุณจินตนาการ!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

ในบางช่วงเวลา (และอาจเปลี่ยนแปลงได้) การรันงานจะสแกนระบบไฟล์จากนั้นสร้างฐานข้อมูลด้วย จากนั้นเป็นฐานข้อมูลนี้ (ที่อยู่ข) โดยมีดัชนีที่เหมาะสมซึ่งlocateคำสั่งนั้นขัดข้องแทนที่จะสแกนผ่านฮาร์ดไดรฟ์ของคุณ ณ จุดนั้น

ดังนั้นข้อดีคือมันเร็วมากเมื่อเปรียบเทียบกับการสแกนฮาร์ดไดรฟ์ ข้อเสียคือฐานข้อมูลค้นหา (locatedb) ไม่ใช่ 'สด' ดังนั้นจึงสามารถใช้สำหรับไฟล์ที่มีอยู่ 'ณ ' สแกนครั้งสุดท้ายเท่านั้น

หากต้องการอัปเดตที่ตั้งอยู่ตอนนี้ทำงานupdatedb(หรือsudo updatedbถ้าจำเป็น)

btw ฉันเพิ่งวิ่งsudo updatedbในประเทศและใช้เวลา 3 1/2 วินาที! ฉันมี 31,000 ไฟล์


1

ดังที่คนอื่น ๆ ชี้ไว้การค้นหาอาจเป็นเครื่องมือที่ดีกว่าสำหรับการค้นหาที่ง่ายกว่า

อย่างไรก็ตามสำหรับการค้นหาที่ซับซ้อนมากขึ้นคุณอาจติดกับการค้นหา

วิธีหนึ่งในการเพิ่มความเร็วในการค้นหาคือการ จำกัด ไดเรกทอรีที่ไฟล์ของคุณอยู่แทนที่จะค้นหาไดเรกทอรีรากทั้งหมด


0

สำหรับการค้นหาเดียว ฉันไม่พบการเร่งความเร็วใด ๆ เว้นแต่จะพยายาม จำกัด การค้นหาให้แคบลงโดยใช้findตัวเลือก

อย่างไรก็ตาม; ถ้าคุณต้องการที่จะทำหลายfindการดำเนินงานในชุดเดียวกันของไฟล์ ; grepผมได้เพิ่มความเร็วอย่างมีนัยสำคัญประชากรของไฟล์ชั่วคราวกับทุกไฟล์และการใช้ แน่นอนว่าสิ่งนี้ไม่คำนึงถึงไฟล์บัญชีที่ถูกเพิ่มหรือลบ

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