วิธีค้นหาไฟล์ใน FreeBSD


14

ฉันพยายามค้นหาสำเนาทั้งหมดของexample.filenameบนเซิร์ฟเวอร์ FreeBSD ของฉัน วิธีที่ดีที่สุด / ง่ายที่สุด / มีประสิทธิภาพมากที่สุดคืออะไร


1
ในขณะที่คำตอบจะคล้ายกันคุณอาจต้องการชี้แจงว่าคุณใช้ Linux หรือ FreeBSD พวกเขาไม่เหมือนกัน
Greg Hewgill

ชื่อแก้ไขเพื่อให้เฉพาะระบบปฏิบัติการอื่น ๆ
เอียน

สิ่งนี้น่าจะติดแท็ก FreeBSD แต่ฉันไม่มีชื่อเสียงที่จะทำเช่นนั้น
mikl

คำตอบ:


18
find / -name example.filename

2
เชื่อถือได้ แต่ช้า บางครั้งช้ามาก
dmckee --- ผู้ดูแลอดีตลูกแมว

3
ธง 'find' อื่น ๆ ที่อาจเหมาะสมขึ้นอยู่กับความต้องการ: -type f (จะไม่รบกวนไดเรกทอรีหรือ symlink ที่มีชื่อเดียวกัน) -ls (เพื่อแสดงรายละเอียดเช่นขนาดของไฟล์เช่นหากไฟล์มีเหมือนกัน ชื่อ แต่เนื้อหาที่แตกต่างกัน)
ซัค ธ อมป์สัน

19
locate filename

เร็วกว่าfindมากหากคุณกำลังใช้บริการค้นหาและจะค้นหาเฉพาะไฟล์ที่มีอยู่ในเวลาที่updatedbใช้งานครั้งล่าสุดเท่านั้น (โดยปกติจะเป็นเวลากลางคืนภายใต้การควบคุมของงาน cron)

คุณสามารถเรียกใช้updatedbด้วยมือ แต่นั่นก็ช้ากว่าที่findcletus แนะนำและต้องการรูท บางครั้งฉันอัพเดทฐานข้อมูลด้วยตนเองหลังจากติดตั้งสิ่งใหม่ ๆ


3
ค้นหาจะใช้งานได้เฉพาะในกรณีที่คุณให้บริการทำงานเพื่อสร้างฐานข้อมูล (ลืมสิ่งที่เรียกว่า) นอกจากนี้ยังอาจประสบปัญหาการหน่วงเวลา (ซึ่งอาจมีการเพิ่มไฟล์ที่คุณกำลังค้นหานับตั้งแต่งานสร้างครั้งล่าสุด)
cletus

มีการแก้ไขและความคิดเห็นที่ข้ามสาย เย็น. แน่นอนว่าคุณเป็นทั้งสองอย่าง
dmckee --- ผู้ดูแลอดีตลูกแมว

4
หากคุณพบว่าตัวเองกำลังทำfind /หรืออยู่บนต้นไม้ใหญ่มากกว่าหนึ่งครั้งต่อสัปดาห์การใช้locateบริการอาจคุ้มค่าเพราะlocate(1)เร็วกว่ามาก
Drew Stephens

@cletus กำลังsudo periodic weeklyอัพเดทlocateฐานข้อมูล เรียกใช้หลังจากติดตั้งหรือดาวน์โหลดใด ๆ ที่อาจมีไฟล์ที่คุณต้องการ
Basil Bourque

2

หากคุณได้ติดตั้ง (aka slocate) แล้ว

locate example.filename

ค้นหาทำงาน cron ทุกคืนที่ทำดัชนีไฟล์ทั้งหมดในเครื่องของคุณใหม่ เหตุผลดังกล่าวไม่ใช่ข้อมูลล่าสุดเสมอ


2

บางครั้งคุณต้องการค้นหาไฟล์ในระดับไดเรกทอรีเฉพาะ ในกรณีนี้สามารถใช้ shell wildcards ได้อย่างสะดวก:

ls /data/*/example.filename

เห็นได้ชัดว่ามันใช้งานได้เฉพาะถ้าคุณมีโครงสร้างไดเรกทอรีที่เข้มงวด


1

locate

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

locate example.filename 

-iจะเป็นกรณีตายเพิ่ม

locate -i eXAmPle.FileName

ปรับปรุง locateฐานข้อมูล

ฐานข้อมูลที่ใช้โดยlocateต้องเป็นข้อมูลล่าสุด หลังจากทำการติดตั้งหรือดาวน์โหลดที่อาจมีไฟล์ที่คุณต้องการคุณต้องอัปเดตlocateฐานข้อมูล

locateฐานข้อมูลจะได้รับการปรับปรุงโดยอัตโนมัติโดยระบบ FreeBSD ของคุณ มีงานประจำสัปดาห์ซึ่งรวมถึงภารกิจนี้ เหลือเกินเหล่านี้มีการระบุไว้ใน/etc/periodic/weekly/310.locateสคริปต์

วิธีที่ปลอดภัยที่สุดที่ง่ายที่สุดในการบังคับให้อัพเดทlocateฐานข้อมูลก่อนคือบังคับให้เหลือเกินชุดประจำสัปดาห์ที่จะต้องทำตอนนี้

sudo periodic weekly

หรือคุณอาจบังคับให้เหลือเกินประจำวันให้เสร็จ คุณอาจต้องการทำสิ่งนี้ทันทีหลังจากตั้งค่าระบบ FreeBSD ใหม่

sudo periodic daily weekly monthly

หากใช้ช่องทางอื่นในการอัพเดทlocateฐานข้อมูลคุณอาจได้รับข้อความเกี่ยวกับความไม่ปลอดภัยเปิดเผยชื่อของไฟล์ระบบทั้งหมดของคุณต่อผู้ใช้ทุกคนในระบบ FreeBSD การใช้periodicเส้นทางหลีกเลี่ยงปัญหานี้



0

บางครั้งฉันก็ทำ


  find . | grep example.filename

อาจไม่มีประสิทธิภาพอย่างมหาศาล


ใช่นั่นตรงกับทุกอย่างแล้วละทิ้งทุกอย่างยกเว้นชื่อเดียวที่คุณกำลังมองหา แต่คุณสามารถทำ 'find -name "example.filename" ซึ่งทำสิ่งเดียวกันโดยไม่ต้องพิมพ์ทุกอย่างและไม่ต้องใช้กระบวนการ grep เพิ่มเติม
Mihai Limbăşan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.