一款開(kāi)源的文件搜索神器,終于不用記 find 命令了
這是 HelloGitHub 推出的《講解開(kāi)源項(xiàng)目》系列,用一篇文章帶你快速上手有趣的開(kāi)源項(xiàng)目。
今天給大家推薦一個(gè)好用+開(kāi)源的文件搜索工具:
fd 支持大多數(shù)主流操作系統(tǒng),快來(lái)更新你的工具箱感受開(kāi)源項(xiàng)目帶來(lái)的便利吧!
一、fd 簡(jiǎn)介
你還在為尋找文件而煩惱嗎?你還在為記不住 find 一大堆參數(shù)而煩惱嗎?那就趕快來(lái)看看我這次推薦的項(xiàng)目 fd 吧!
官方簡(jiǎn)介:A simple, fast and user-friendly alternative to 'find'
我這里先放一個(gè)圖,讓大家直觀地感受下
fd 是一個(gè)命令行工具,提供了多種方便的選項(xiàng)進(jìn)行文件的搜索,而且默認(rèn)是彩色輸出。項(xiàng)目本身是由 Rust 語(yǔ)言編寫的,作為系統(tǒng)級(jí)編程語(yǔ)言 Rust 擁有媲美 C++ 的運(yùn)行速度,那 fd 的速度自然也不在話下,更優(yōu)秀的是,它提供了強(qiáng)大的功能方便用戶按照各種條件進(jìn)行搜索。
這個(gè)優(yōu)秀的項(xiàng)目是不是成功地引起了你的注意呢~
二、fd 如何安裝
作為使用的第一步當(dāng)然是要先安裝啦~
fd 提供了各個(gè)操作系統(tǒng)平臺(tái)的安裝方式,再不濟(jì)可以直接通過(guò)源碼進(jìn)行安裝(前提是有 Rust 的環(huán)境噢)
2.1 一鍵安裝
我這里以我本地的 Mac 使用 brew 為例
$ brew install fdbrew 也可以一鍵升級(jí)
$ brew upgrade fd具體到各個(gè)平臺(tái)的詳細(xì)安裝方法,你可以看這里 安裝文檔
2.2 源碼安裝
$ git clone https://github.com/sharkdp/fd.git$ cd fd$ cargo install --path .
2.3 查看幫助
無(wú)論哪種方式安裝完成后,就可以直接使用了 -h 或 --help 獲取幫助了,--help 就不演示了,區(qū)別就是換成了詳細(xì)的幫助說(shuō)明,如果你以后忘記了某一個(gè)參數(shù)也記得使用 --help 來(lái)查看哦~
三、fd 快速上手演示
為了能讓之后的演示有一個(gè)統(tǒng)一的認(rèn)識(shí),我在這里新建了一個(gè)目錄作為 fd 的測(cè)試目錄,我虛構(gòu)了一些文件和目錄來(lái)模擬實(shí)際情況,包括一個(gè)隱藏目錄,我之后的演示都會(huì)基于該根目錄下,選項(xiàng)如果有短名稱和長(zhǎng)名稱,示例中以短名稱為例。
該目錄大致是這樣:
3.1 簡(jiǎn)單搜索
fd 直接跟想要搜索的內(nèi)容,會(huì)遞歸搜索當(dāng)前目錄下的所有文件,列出文件名中包含目標(biāo)內(nèi)容的結(jié)果(結(jié)果為當(dāng)前目錄的相對(duì)路徑)
$ fd Hellodir1/Hello.java
java/Hello.java
3.2 包含隱藏目錄
選項(xiàng) -H 或 --hidden
3.3 大小寫
默認(rèn) fd 是匹配智能大小寫的,如果你搜索的內(nèi)容是包含大寫會(huì)按照大小寫精確匹配,但如果是小寫會(huì)忽略大小寫匹配,所以 fd 另外提供了兩種選項(xiàng)來(lái)嚴(yán)格控制大小寫匹配

3.7 包括 .gitignore 里的文件
選項(xiàng) -I 或 --no-ignore 我這里新建了一個(gè) .gitignore 文件內(nèi)容只有一個(gè) *.java 用來(lái)演示,并且需要把當(dāng)前目錄通過(guò) git init 初始化成 git 的項(xiàng)目。
這些簡(jiǎn)單的功能已經(jīng)可以滿足一半的日常搜索需求了,接下來(lái)我們看看 fd 提供的更高級(jí)的搜索選項(xiàng)吧!
四、高級(jí)搜索選項(xiàng)
4.1 按深度
選項(xiàng) -d 或 --max-depth <depth>,當(dāng)前路徑算深度 1,dir3 下面的 rs 文件就是深度 4 了。
4.2 按文件類型
選項(xiàng) -t 或 --type <filetype>,fd 提供了以下幾種 filetype 選項(xiàng):
- f:file
- d:directory
- l:symlink
- x:executable
- e:empty
- s:socket
- p:pipe
可以看到所有的 rust、rs、sss、soft 都沒(méi)有出現(xiàn)在結(jié)果集中。
4.5 按所有者
選項(xiàng) -o 或 --owner <user:group>
或者 fd -l -o junjiexun:staff 也可以達(dá)到同樣的效果,但是 fd 不支持單獨(dú)搜索 group,也不支持通配符,如果你有想法的話可以給他提 issue 哦~
4.6 組合命令
fd 提供了 -x 或 --exec <cmd>、-X 或 --exec-batch <cmd> 來(lái)進(jìn)行對(duì)搜索結(jié)果集的進(jìn)一步處理
找到所有和 java 匹配的內(nèi)容并且刪除!(僅僅用做演示,rm -rf 慎用)
$ fd java -X rm -rf找到所有的 py 并且通過(guò) vim 打開(kāi)
$ fd py -X vim還可以使用諸如 unzip、ls、convert 等等其他常用的命令,也可以直接使用 *unix 語(yǔ)法 | 管道符語(yǔ)法進(jìn)一步處理。
4.7 正則表達(dá)式
對(duì)于文件的內(nèi)容搜索,我之前演示的是諸如 Hello、java、py 都是這樣的完整文本,實(shí)際 fd 默認(rèn)就是支持正則表達(dá)式對(duì)內(nèi)容進(jìn)行搜索的,但是正則表達(dá)式需要使用單引號(hào) ' 包裹起來(lái),我下面演示:將所有 s 開(kāi)頭的文件都能被搜索出來(lái)。
上面的選項(xiàng)大部分都是可以同時(shí)使用的,篇幅有限我這里就不繼續(xù)演示了。
五、總結(jié)
fd 是一個(gè)簡(jiǎn)單友好的命令行文件搜索工具,而且其開(kāi)源的屬性作為 Rust 源碼學(xué)習(xí)的對(duì)象也是非常優(yōu)秀的,趕緊學(xué)起來(lái)!覺(jué)得本文還不錯(cuò)的話,轉(zhuǎn)評(píng)贊走一波!