fd เป็นโปรแกรมสำหรับค้นหารายการในระบบไฟล์ โดยเป็นทางเลือกแทนคำสั่ง find แบบดั้งเดิมที่เรียบง่ายกว่า เร็วกว่า และเป็นมิตรกับผู้ใช้มากกว่า
- แม้จะไม่ได้รองรับความสามารถทั้งหมดของ
find แต่ก็มีค่าเริ่มต้นที่เหมาะสมสำหรับการใช้งานทั่วไป
- ใช้งานได้บน Windows, macOS, Linux
- ไวยากรณ์เข้าใจง่าย: ใช้งานได้ง่ายในรูปแบบ
fd PATTERN (สะดวกกว่า find -iname '*PATTERN*')
- รองรับ regular expression และ glob pattern
- ให้ประสิทธิภาพที่รวดเร็วด้วย การค้นหาไดเรกทอรีแบบขนาน
- ไฮไลต์สีตามประเภทไฟล์ (คล้าย
ls)
- รองรับ การรันคำสั่งแบบขนาน
- แยกแยะตัวพิมพ์เล็ก-ใหญ่แบบอัจฉริยะ: โดยปกติจะไม่สนใจตัวพิมพ์เล็ก-ใหญ่ แต่ถ้ามีตัวพิมพ์ใหญ่จะทำการแยกแยะ
- ละเว้นไฟล์และไดเรกทอรีที่ซ่อนไว้โดยค่าเริ่มต้น
- ละเว้นแพตเทิร์น
.gitignore โดยค่าเริ่มต้น
- ชื่อคำสั่งสั้นกว่า
find 50%
วิธีใช้งาน
- ค้นหารายการที่มีแพตเทิร์นอยู่ในไดเรกทอรีปัจจุบัน
fd netfl
- ค้นหาด้วย regular expression
fd '^x.*rc$'
- ค้นหาในไดเรกทอรีที่กำหนด
fd passwd /etc
- แสดงรายการไฟล์ทั้งหมดใต้ไดเรกทอรีปัจจุบันแบบ recursive
fd
- ค้นหาไฟล์ตามนามสกุลที่กำหนด (ใช้ตัวเลือก
-e) fd -e md
- ค้นหาชื่อไฟล์แบบตรงตัว (ใช้ตัวเลือก
-g) fd -g libc.so /usr
- ค้นหารวมไฟล์ที่ซ่อนและไฟล์ที่ถูกละเว้น (ใช้ตัวเลือก
-H, -I) fd -H pre-commit fd -I num_cpu
- ค้นหาจากพาธทั้งหมดแทนชื่อไฟล์ (ใช้ตัวเลือก
-p) fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
- รันคำสั่งกับผลลัพธ์แต่ละรายการที่ค้นเจอ (
-x) fd -e zip -x unzip
- ส่งผลการค้นหาทั้งหมดให้คำสั่งเดียว (
-X) fd -g 'test_*.py' -X vim
- ไวยากรณ์ placeholder
- {}: พาธเต็มของผลการค้นหา
- {.}: พาธที่ตัดนามสกุลไฟล์ออก
- {/}: ชื่อไฟล์
- {//}: ไดเรกทอรีแม่
- {/.}: ชื่อไฟล์ที่ตัดนามสกุลออก
- สามารถยกเว้นไดเรกทอรีหรือไฟล์ที่กำหนดได้ (ใช้ตัวเลือก
-E) fd -H -E .git
- สามารถสร้างไฟล์
.fdignore เพื่อกำหนดแพตเทิร์นที่ยกเว้นแบบ global ได้
- ลบไฟล์ที่ค้นพบได้ (
-X rm) fd -H '^\.DS_Store$' -tf -X rm
ตัวเลือกคำสั่งหลัก
-H: ค้นหารวมไฟล์และไดเรกทอรีที่ซ่อนอยู่
-I: ไม่สนใจ .gitignore และ .fdignore
-p: ค้นหาจากพาธทั้งหมด
-e: ค้นหาตามนามสกุลที่กำหนด
-x: รันคำสั่งกับผลการค้นหา
-X: ส่งผลการค้นหาทั้งหมดให้คำสั่งเดียว
-E: ยกเว้นไฟล์หรือไดเรกทอรีที่กำหนด
การเปรียบเทียบประสิทธิภาพ (Benchmark)
- ผลการทดสอบค้นหาใน 750,000 ไดเรกทอรี และ 4 ล้านไฟล์
- ประสิทธิภาพของ
find: ประมาณ 19.9 วินาที
- ประสิทธิภาพของ
fd: ประมาณ 854.8ms
- เร็วกว่า
find 23 เท่า
การผสานการทำงานกับโปรแกรมอื่น
- แสดงผลการค้นหาจาก
fd ใน fzf ได้ export FZF_DEFAULT_COMMAND='fd --type file'
- แสดงผลลัพธ์ของ
fd เป็นเมนูใน rofi fd --type f -e pdf . $HOME | rofi -dmenu
- แสดงผลลัพธ์ในโครงสร้างแบบ tree
fd | tree --fromfile
- ใช้ผลการค้นหาใน
xargs ได้ fd -0 -e rs | xargs -0 wc -l
2 ความคิดเห็น
มีปลั๊กอิน neovim ตัวหนึ่งที่ใช้ fd ก็เลยติดตั้งไว้ แล้วก็ใช้มาจนถึงตอนนี้เลยครับ 555
ความคิดเห็นใน Hacker News