在命令列工具的世界中,高效查詢檔案一直是一項挑戰。傳統的 Unix find
命令雖然功能強大,但以其複雜的語法和陡峭的學習曲線而聞名。而 fd
作為一種現代替代方案,憑藉其直觀的語法、速度和智慧預設設定,正在開發者和高階使用者中迅速獲得歡迎。
由 Rust 驅動的命令列工具復興
命令列工具生態系統正在經歷一場復興,以 fd
為代表的新型 Rust 編寫的工具正在引領潮流。由 David Peter(網名 sharkdp)建立的 fd
是現代命令列工具集合的一部分,這些工具在不犧牲效能的情況下優先考慮使用者體驗。Rust 程式語言為這些工具提供了記憶體安全、併發性和令人印象深刻的速度——這些特性使它們特別適合檔案系統操作。
社群中的許多使用者注意到,sharkdp 還開發了其他流行工具,如 bat
(帶有語法高亮的 cat
替代品)、hyperfine
(一個基準測試工具)和 hexyl
(一個十六進位制檢視器)。這些工具代表了一種一致的設計理念,專注於透過更好的預設設定和更直觀的介面來改善日常開發者工作流程。
sharkdp 開發的相關工具
- bat:一個帶有語法高亮的 cat 克隆工具
- hyperfine:一個命令列基準測試工具
- hexyl:一個命令列十六進位制檢視器
- numbat:一個科學計算器
真正有意義的智慧預設設定
fd
最受歡迎的方面之一是其經過深思熟慮的預設行為。與不加區分地搜尋所有內容的 find
不同,fd
自動忽略隱藏目錄、.gitignore
中的檔案和版本控制目錄。這意味著對於大多數用例,搜尋結果立即變得更加相關。
「我是 sharkdp 的忠實粉絲。感謝您創造了我每天都在使用的出色軟體。bat、fd、hexyl、hyperfine...我想借此機會提醒所有薪酬不菲的工程師們,如果我們每人每月拿出10美元贊助像 sharkdp 這樣有才華的軟體製作者,網際網路將會變得更美好。」
該工具還具有智慧大小寫敏感性——預設情況下不區分大小寫搜尋,但如果模式包含大寫字元,則切換為大小寫敏感。這些決策反映了對開發者日常如何處理檔案的深刻理解。
fd 的主要特點
- 直觀的語法:
fd PATTERN
而不是find . -name "*PATTERN*"
- 基於正則表示式的搜尋(預設)
- 由於並行目錄遍歷而快速
- 使用顏色突出顯示不同的檔案型別(類似於 ls)
- 智慧大小寫:預設情況下不區分大小寫搜尋
- 預設忽略隱藏目錄和檔案
- 預設忽略 .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
- 使用萬用字元模式:
fd -g "*.jpg"
平衡簡單性與強大功能
雖然 fd
優先考慮常見用例的簡單性,但它並不犧牲高階場景的功能。該工具支援正則表示式、檔案型別過濾和命令執行功能,這些功能可以與傳統的 find
相媲美或超越。這種平衡使新使用者能夠快速上手,同時為有經驗的使用者提供所需的靈活性。
一些使用者注意到,雖然 fd
沒有實現 find
的每一個功能,但它以更溫和的學習曲線覆蓋了絕大多數日常用例。對於 fd
不足以處理的偶爾出現的邊緣情況,傳統工具仍然可用——這創造了一種務實的共存,而不是強制替換。
像 fd
這樣的工具的興起代表了命令列理念的轉變——一種重視使用者體驗和合理預設設定,同時保持命令列使用者期望的強大功能和靈活性。隨著越來越多的開發者發現這些現代替代品,我們可能會看到這一領域的持續創新,進一步改進我們每天使用的工具。
參考:fd