ในโลกของยูทิลิตี้คอมมานด์ไลน์ การค้นหาไฟล์อย่างมีประสิทธิภาพเป็นความท้าทายมาอย่างยาวนาน คำสั่ง find
แบบดั้งเดิมของ Unix แม้จะมีความสามารถสูง แต่เป็นที่รู้จักในด้านไวยากรณ์ที่ซับซ้อนและเส้นโค้งการเรียนรู้ที่ชัน เข้ามาพบกับ fd
ทางเลือกสมัยใหม่ที่กำลังได้รับความนิยมอย่างรวดเร็วในหมู่นักพัฒนาและผู้ใช้ระดับสูง ด้วยไวยากรณ์ที่เข้าใจง่าย ความเร็ว และค่าเริ่มต้นที่ชาญฉลาด
การปฏิวัติเครื่องมือคอมมานด์ไลน์ด้วยพลัง Rust
ระบบนิเวศของเครื่องมือคอมมานด์ไลน์กำลังประสบกับการปฏิวัติครั้งใหม่ โดยมียูทิลิตี้ใหม่ที่เขียนด้วย Rust อย่าง fd
เป็นผู้นำการเปลี่ยนแปลง สร้างโดย David Peter (รู้จักในนาม sharkdp) fd
เป็นส่วนหนึ่งของคอลเลกชันเครื่องมือ CLI สมัยใหม่ที่ให้ความสำคัญกับประสบการณ์ผู้ใช้โดยไม่ลดทอนประสิทธิภาพ ภาษาโปรแกรมมิ่ง Rust มอบความปลอดภัยด้านหน่วยความจำ การทำงานแบบขนาน และความเร็วที่น่าประทับใจให้กับเครื่องมือเหล่านี้—คุณสมบัติที่ทำให้พวกมันเหมาะสมอย่างยิ่งสำหรับการทำงานกับระบบไฟล์
ผู้ใช้หลายคนในชุมชนได้สังเกตว่า sharkdp ยังเป็นผู้อยู่เบื้องหลังเครื่องมือยอดนิยมอื่นๆ เช่น bat
(ตัวทดแทน cat
ที่มีการไฮไลต์ไวยากรณ์) hyperfine
(เครื่องมือวัดประสิทธิภาพ) และ hexyl
(โปรแกรมดูไฟล์แบบเลขฐานสิบหก) คอลเลกชันเครื่องมือเหล่านี้แสดงถึงปรัชญาการออกแบบที่สอดคล้องกัน มุ่งเน้นการปรับปรุงขั้นตอนการทำงานของนักพัฒนาในชีวิตประจำวันผ่านค่าเริ่มต้นที่ดีขึ้นและอินเตอร์เฟซที่เข้าใจง่ายกว่า
เครื่องมือที่เกี่ยวข้องโดย sharkdp
- bat: โปรแกรมเหมือน cat แต่มีการไฮไลต์ไวยากรณ์
- hyperfine: เครื่องมือวัดประสิทธิภาพบนคอมมานด์ไลน์
- hexyl: เครื่องมือดูข้อมูลแบบเลขฐานสิบหกบนคอมมานด์ไลน์
- numbat: เครื่องคิดเลขทางวิทยาศาสตร์
ค่าเริ่มต้นอัจฉริยะที่มีความหมายจริงๆ
หนึ่งในแง่มุมที่ได้รับการชื่นชมมากที่สุดของ fd
คือพฤติกรรมค่าเริ่มต้นที่ผ่านการคิดอย่างรอบคอบ ไม่เหมือนกับ find
ที่ค้นหาทุกอย่างโดยไม่แยกแยะ fd
จะข้ามไดเรกทอรีที่ซ่อนอยู่ ไฟล์ใน .gitignore
และไดเรกทอรีควบคุมเวอร์ชันโดยอัตโนมัติ นี่หมายความว่าผลการค้นหาจะมีความเกี่ยวข้องมากขึ้นทันทีสำหรับกรณีการใช้งานส่วนใหญ่
Big sharkdp fan. Thank you for making awesome software that i use DAILY. bat, fd, hexyl, hyperfine... I'm going to take this moment to remind all of you well-paid engineers that if we each spread $10 a month sponsoring talented software makers like sharkdp the Internet would be a better place.
เครื่องมือนี้ยังมีความฉลาดในการแยกแยะตัวพิมพ์ใหญ่-เล็ก—ค้นหาโดยไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็กโดยค่าเริ่มต้น แต่จะเปลี่ยนเป็นคำนึงถึงตัวพิมพ์ใหญ่-เล็กหากรูปแบบมีตัวอักษรพิมพ์ใหญ่ การตัดสินใจเหล่านี้สะท้อนถึงความเข้าใจอย่างลึกซึ้งว่านักพัฒนาทำงานกับไฟล์ในชีวิตประจำวันอย่างไร
คุณสมบัติหลักของ fd
- ไวยากรณ์ที่เข้าใจง่าย:
fd PATTERN
แทนที่จะเป็นfind . -name "*PATTERN*"
- การค้นหาโดยใช้ regular expression (เป็นค่าเริ่มต้น)
- รวดเร็วเนื่องจากการทำงานแบบขนานในการสำรวจไดเรกทอรี
- ใช้สีเพื่อไฮไลท์ประเภทไฟล์ที่แตกต่างกัน (คล้ายกับคำสั่ง ls)
- Smart case: ค้นหาโดยไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็กโดยค่าเริ่มต้น
- ไม่รวมไดเรกทอรีและไฟล์ที่ซ่อนอยู่โดยค่าเริ่มต้น
- ไม่รวมไฟล์ที่อยู่ใน .gitignore โดยค่าเริ่มต้น
- สามารถดำเนินการคำสั่งหลังจากได้ผลลัพธ์การค้นหา
- เขียนด้วยภาษา Rust
ประสิทธิภาพผ่านการประมวลผลแบบขนาน
นอกเหนือจากอินเตอร์เฟซที่เป็นมิตรกับผู้ใช้แล้ว fd
ยังใช้ประโยชน์จากความสามารถในการทำงานแบบขนานของ Rust เพื่อทำการสำรวจไดเรกทอรีแบบขนาน วิธีการนี้ช่วยเพิ่มความเร็วในการค้นหาอย่างมีนัยสำคัญ โดยเฉพาะอย่างยิ่งบนระบบมัลติคอร์สมัยใหม่และอุปกรณ์จัดเก็บข้อมูลความเร็วสูงเช่น NVMe SSD ผู้ใช้รายงานการปรับปรุงประสิทธิภาพที่น่าทึ่งเมื่อเทียบกับเครื่องมือแบบดั้งเดิม โดยการทดสอบประสิทธิภาพบางอย่างแสดงให้เห็นว่า fd
สามารถค้นหาเสร็จสิ้นในเวลาเพียงไม่กี่วินาที ในขณะที่ find
อาจใช้เวลาเกือบหนึ่งนาที
ข้อได้เปรียบด้านประสิทธิภาพจะเห็นได้ชัดเจนเป็นพิเศษเมื่อทำงานกับฐานโค้ดขนาดใหญ่หรือคอลเลกชันสื่อ นอกจากนี้ ความสามารถของเครื่องมือในการดำเนินการคำสั่งกับผลการค้นหาแบบขนาน (ผ่านตัวเลือก -x
หรือ -X
) ยังช่วยเพิ่มประสิทธิภาพการทำงานเมื่อทำงานกับการดำเนินการแบบกลุ่ม
เติมเต็มระบบนิเวศของเครื่องมือสมัยใหม่
fd
ไม่ได้อยู่อย่างโดดเดี่ยว—มันเป็นส่วนหนึ่งของระบบนิเวศที่กำลังเติบโตของเครื่องมือคอมมานด์ไลน์สมัยใหม่ที่ทำงานร่วมกันได้ดี ผู้ใช้จำนวนมากจับคู่ fd
กับเครื่องมืออย่าง ripgrep
(สำหรับการค้นหาเนื้อหา) fzf
(สำหรับการค้นหาแบบฟัซซี่) และ bat
(สำหรับการดูไฟล์) เครื่องมือเหล่านี้มีปรัชญาการออกแบบที่คล้ายคลึงกันและมักเสริมซึ่งกันและกันในขั้นตอนการทำงานที่ซับซ้อน
ชุมชนได้นำเครื่องมือเหล่านี้มาใช้ผ่านจุดเชื่อมต่อต่างๆ รวมถึง Terminal Trove ซึ่งเป็นคอลเลกชันที่แสดงยูทิลิตี้เทอร์มินัลสมัยใหม่ วิธีการระบบนิเวศนี้หมายความว่าการนำ fd
มาใช้มักนำผู้ใช้ไปสู่การค้นพบเครื่องมืออื่นๆ ที่สามารถเพิ่มประสิทธิภาพการทำงานของพวกเขาได้มากขึ้น
คำสั่ง fd ที่ใช้บ่อย
- การค้นหาแบบง่าย:
fd pattern
- การค้นหาแบบคำนึงถึงตัวพิมพ์ใหญ่-เล็ก:
fd -s pattern
- รวมไฟล์ที่ซ่อนอยู่:
fd -H pattern
- ค้นหาเส้นทางไฟล์เต็ม:
fd -p pattern
- ดำเนินการคำสั่งกับผลลัพธ์:
fd pattern -x command {}
- ค้นหาตามนามสกุลไฟล์:
fd -e jpg
- ใช้รูปแบบ glob:
fd -g "*.jpg"
การสร้างสมดุลระหว่างความเรียบง่ายกับพลัง
ในขณะที่ fd
ให้ความสำคัญกับความเรียบง่ายสำหรับกรณีการใช้งานทั่วไป มันไม่ได้ลดทอนพลังสำหรับสถานการณ์ขั้นสูง เครื่องมือนี้รองรับนิพจน์ทั่วไป การกรองประเภทไฟล์ และความสามารถในการดำเนินการคำสั่งที่เทียบเท่าหรือเหนือกว่า find
แบบดั้งเดิม ความสมดุลนี้ช่วยให้ผู้ใช้ใหม่สามารถเริ่มต้นได้อย่างรวดเร็วในขณะที่ให้ความยืดหยุ่นที่จำเป็นแก่ผู้ใช้ที่มีประสบการณ์
ผู้ใช้บางคนสังเกตว่าแม้ fd
จะไม่ได้นำฟีเจอร์ทุกอย่างของ find
มาใช้ แต่มันครอบคลุมกรณีการใช้งานประจำวันส่วนใหญ่ด้วยเส้นโค้งการเรียนรู้ที่อ่อนโยนกว่ามาก สำหรับกรณีพิเศษที่ fd
ไม่เพียงพอ เครื่องมือแบบดั้งเดิมยังคงมีอยู่—สร้างการอยู่ร่วมกันอย่างเป็นรูปธรรมมากกว่าการบังคับให้เปลี่ยนแทน
การเติบโตของเครื่องมืออย่าง fd
แสดงถึงการเปลี่ยนแปลงในปรัชญาคอมมานด์ไลน์—ที่ให้คุณค่ากับประสบการณ์ผู้ใช้และค่าเริ่มต้นที่สมเหตุสมผล ในขณะที่ยังคงรักษาพลังและความยืดหยุ่นที่ผู้ใช้คอมมานด์ไลน์คาดหวัง เมื่อนักพัฒนาค้นพบทางเลือกสมัยใหม่เหล่านี้มากขึ้น เราจะเห็นนวัตกรรมอย่างต่อเนื่องในพื้นที่นี้ ซึ่งจะปรับปรุงเครื่องมือที่เราใช้ทุกวันให้ดียิ่งขึ้น
อ้างอิง: fd