fd เป็นทางเลือกที่ง่ายกว่าสำหรับคำสั่ง find มันใช้ไวยากรณ์ที่ถูกตัดทอนและโครงสร้างคำสั่งแบบย่อเพื่อให้คำสั่งที่พิมพ์ของคุณสั้นและตรงประเด็น อย่างไรก็ตาม การขาดคำฟุ่มเฟือยที่ทำให้ fd ง่ายต่อการพิมพ์ทำให้เข้าใจยากขึ้น fd ยังเรียกใช้การจับคู่รูปแบบได้เร็วกว่าคำสั่งค้นหาเริ่มต้น เรียนรู้วิธีใช้ fd บน Linux และ macOS
ติดตั้ง fd บน Linux
fd ไม่ได้จัดส่งในหลายระบบโดยค่าเริ่มต้น คุณจะต้องใช้ตัวจัดการแพ็คเกจที่คุณต้องการเพื่อดาวน์โหลดและติดตั้งแอปพลิเคชัน จากนั้นจึงเรียกใช้ได้จากภายใน Terminal
อูบุนตู
จะจัดส่งบน Ubuntu Disco Dingo 19.04 ไม่เช่นนั้นคุณจะต้องดาวน์โหลดและติดตั้ง สำหรับ Ubuntu และ Linux distros ที่ใช้ Debian อื่นๆ คุณจะต้องเรียกใช้คำสั่งต่อไปนี้เพื่อดาวน์โหลดและติดตั้งโปรแกรม
wget https://github.com/sharkdp/fd/releases/download/v7.3.0/fd-musl_7.3.0_amd64.deb sudo dpkg -i fd-musl_7.3.0_amd64.deb
หากคุณต้องการเวอร์ชัน 32 บิตหรือบิลด์อื่น ให้ดาวน์โหลดจากหน้าการเผยแพร่ GitHub สำหรับ fd
เดเบียน
ใน Debian Buster หรือใหม่กว่า คุณสามารถติดตั้ง fd จากที่เก็บที่ดูแลโดย Debian อย่างเป็นทางการ
sudo apt-get install fd-find
Fedora
จาก Fedora 28 สามารถติดตั้ง fd ได้จากเวอร์ชันแพ็คเกจอย่างเป็นทางการ
dnf install fd-find
Arch Linux
ในทำนองเดียวกัน ผู้ใช้ Arch สามารถคว้า fd จาก repos อย่างเป็นทางการ:
pacman -S fd
Gentoo Linux
ผู้ใช้ Gentoo สามารถใช้คำสั่งต่อไปนี้เพื่อดาวน์โหลด fd ebuild:
emerge -av fd
macOS
หากคุณใช้ macOS ให้ติดตั้ง Homebrew จากนั้นใช้คำสั่งด้านล่างเพื่อติดตั้ง fd:
brew install fd
การใช้ fd บน Linux
คำสั่ง fd มีโครงสร้างพื้นฐานของ fd pattern
เมื่อเทียบกับ find . -iname 'pattern'
.
หากต้องการค้นหาไฟล์โดยใช้ชื่อ ให้ใช้คำสั่งต่อไปนี้:
fd filename
สิ่งนี้จะค้นหาภายในไดเร็กทอรีการทำงานที่กำหนดไว้ล่วงหน้า รวมถึงไดเร็กทอรีย่อย หากต้องการค้นหาภายในไดเร็กทอรีที่ระบุ ให้ระบุหลังจากคำค้นหาของคุณ:
fd filename /path/to/search
การดำเนินการคำสั่งตามผลลัพธ์
เช่นเดียวกับ find fd มีฟังก์ชันที่ส่งผ่านไฟล์ที่พบไปยังคำสั่งอื่นเพื่อดำเนินการ ที่ find ใช้ find . -iname pattern -exec command
, fd ใช้ -x
ธง:
fd -e zip -x unzip
คำสั่งนี้จะส่งไฟล์ zip ทั้งหมดในไดเร็กทอรีไปยังคำสั่ง unzip คุณสามารถใช้สัญลักษณ์ต่อไปนี้ภายใน "วลี" ของคำสั่งดำเนินการเพื่อส่งข้อมูลในรูปแบบเฉพาะ
{}
:ตัวยึดตำแหน่งจะถูกแทนที่ด้วยเส้นทางของผลการค้นหา (files/images/portrait.jpg
){/}
:ตัวยึดตำแหน่งที่จะถูกแทนที่ด้วยชื่อไฟล์ของผลลัพธ์เท่านั้น ซึ่งเป็นที่รู้จักโดยผู้สนใจรัก UNIX ว่าเป็นชื่อฐาน (portrait.jpg
){//}
:ตัวยึดตำแหน่งถูกแทนที่ด้วยไดเร็กทอรีหลักของรายการที่พบ (files/images
){.}
:ตัวยึดตำแหน่งแทนที่ด้วยพาธไปยังชื่อไฟล์โดยไม่มีนามสกุล (files/images/portrait
){/.}
:ตัวยึดตำแหน่งแทนที่ด้วยชื่อฐานของรายการที่พบโดยไม่มีส่วนขยาย (portrait
)
ลองพิจารณาตัวอย่างต่อไปนี้ โดยใช้สัญลักษณ์ตัวแทนที่อ้างถึงข้างต้น 2 ตัว:
fd -e flac -x ffmpeg -i {} -c:a libopus {.}.opus
แฟล็ก fd ที่มีประโยชน์อื่นๆ
-e
:ค้นหานามสกุลของไฟล์เท่านั้นโดยไม่มีจุดคั่น-E pattern
:ยกเว้นผลลัพธ์ที่ตรงกับรูปแบบต่อไปนี้--changed-newer-than date|duration
:กรองผลลัพธ์ตามเวลาตั้งแต่แก้ไขไฟล์ ซึ่งจะแสดงเฉพาะไฟล์ที่มีวันที่แก้ไขหลังวันที่ระบุเท่านั้น เวลาสามารถกำหนดระยะเวลาที่นับถอยหลังจากช่วงเวลาปัจจุบันได้ (10h
,1d
,35min
) หรือตั้งเวลาได้ ("YYYY-MM-DD HH:MM:SS"
)- –change-older-than date|duration :ชอบ –change-newer แต่จะแสดงไฟล์ที่แก้ไขก่อนวันที่หรือระยะเวลาที่ระบุ ไม่ใช่หลังจาก
-t
:แสดงเฉพาะไฟล์ในประเภทที่ระบุ (-tf สำหรับไฟล์, -td สำหรับไดเร็กทอรี, -tx สำหรับไฟล์เรียกทำงาน, -tl สำหรับ symlink, -te สำหรับไฟล์ว่าง)-p
:ค้นหาภายในชื่อพาธทั้งหมด ไม่ใช่แค่ชื่อไฟล์-s
:บังคับ case-sensitivity โดยค่าเริ่มต้น fd จะไม่สนใจตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เว้นแต่จะพิมพ์อักษรตัวพิมพ์ใหญ่ในรูปแบบการค้นหา-H
:แสดงไฟล์และไดเรกทอรีที่ซ่อนอยู่ภายในผลลัพธ์-L
:ตามลิงค์ไปยังไดเร็กทอรี symlink.
fd เป็นทางเลือกที่ดีสำหรับคำสั่ง find หากประสบการณ์ของคุณคือคำสั่ง "find" นั้นใช้งานยาก แสดงว่าคุณอาจใช้ fd ได้ดีกว่า ลองใช้และแจ้งให้เราทราบหากเป็นประโยชน์กับคุณ