<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一款開源的文件搜索神器,終于不用記 find 命令了

          共 6092字,需瀏覽 13分鐘

           ·

          2022-04-15 14:10

          作者:HelloGitHub-老荀

          這是 HelloGitHub 推出的《講解開源項(xiàng)目》系列,用一篇文章帶你快速上手有趣的開源項(xiàng)目。

          今天給大家推薦一個(gè)好用+開源的文件搜索工具:

          fd 支持大多數(shù)主流操作系統(tǒng),快來更新你的工具箱感受開源項(xiàng)目帶來的便利吧!

          一、fd 簡介

          你還在為尋找文件而煩惱嗎?你還在為記不住 find 一大堆參數(shù)而煩惱嗎?那就趕快來看看我這次推薦的項(xiàng)目 fd 吧!

          項(xiàng)目地址:https://github.com/sharkdp/fd

          官方簡介:A simple, fast and user-friendly alternative to 'find'

          我這里先放一個(gè)圖,讓大家直觀地感受下

          fd 是一個(gè)命令行工具,提供了多種方便的選項(xiàng)進(jìn)行文件的搜索,而且默認(rèn)是彩色輸出。項(xiàng)目本身是由 Rust 語言編寫的,作為系統(tǒng)級編程語言 Rust 擁有媲美 C++ 的運(yùn)行速度,那 fd 的速度自然也不在話下,更優(yōu)秀的是,它提供了強(qiáng)大功能方便用戶按照各種條件進(jìn)行搜索。

          這個(gè)優(yōu)秀的項(xiàng)目是不是成功地引起了你的注意呢~

          二、fd 如何安裝

          作為使用的第一步當(dāng)然是要先安裝啦~

          fd 提供了各個(gè)操作系統(tǒng)平臺的安裝方式,再不濟(jì)可以直接通過源碼進(jìn)行安裝(前提是有 Rust 的環(huán)境噢)

          2.1 一鍵安裝

          我這里以我本地的 Mac 使用 brew 為例

          $?brew?install?fd

          brew 也可以一鍵升級

          $?brew?upgrade?fd

          具體到各個(gè)平臺的詳細(xì)安裝方法,你可以看這里 安裝文檔

          2.2 源碼安裝

          $?git?clone?https://github.com/sharkdp/fd.git
          $?cd?fd
          $?cargo?install?--path?.

          2.3 查看幫助

          無論哪種方式安裝完成后,就可以直接使用了 -h--help 獲取幫助了,--help 就不演示了,區(qū)別就是換成了詳細(xì)的幫助說明,如果你以后忘記了某一個(gè)參數(shù)也記得使用 --help 來查看哦~

          $?fd?-h
          fd?8.2.1

          USAGE:
          ????fd?[FLAGS/OPTIONS]?[]?[...]

          FLAGS:
          ????-H,?--hidden????????????搜索隱藏的文件和目錄
          ????-I,?--no-ignore?????????不要忽略?.(git?|?fd)ignore?文件匹配
          ????????--no-ignore-vcs?????不要忽略.gitignore文件的匹配
          ????-s,?--case-sensitive ???區(qū)分大小寫的搜索(默認(rèn)值:智能案例)
          ????-i, --ignore-case ??????不區(qū)分大小寫的搜索(默認(rèn)值:智能案例)
          ????-F,?--fixed-strings?????將模式視為文字字符串
          ????-a,?--absolute-path?????顯示絕對路徑而不是相對路徑
          ????-L,?--follow????????????遵循符號鏈接
          ????-p, --full-path ????????搜索完整路徑(默認(rèn)值:僅限 file-/dirname)
          ????-0,?--print0????????????用null字符分隔結(jié)果
          ????-h,?--help??????????????打印幫助信息
          ????-V,?--version???????????打印版本信息

          OPTIONS:
          ????-d, --max-depth ????????設(shè)置最大搜索深度(默認(rèn)值:無)
          ????-t,?--type?... ??????按類型過濾:文件(f),目錄(d),符號鏈接(l),
          ???????????????????????????????????可執(zhí)行(x),空(e)
          ????-e,?--extension?...???????按文件擴(kuò)展名過濾
          ????-x,?--exec????????????????為每個(gè)搜索結(jié)果執(zhí)行命令
          ????-E,?--exclude?...?????排除與給定glob模式匹配的條目
          ????????--ignore-file?...????以.gitignore格式添加自定義忽略文件
          ????-c, --color ?????????????何時(shí)使用顏色:never,*auto*, always
          ????-j,?--threads?????????????設(shè)置用于搜索和執(zhí)行的線程數(shù)
          ????-S, --size ... ??????????根據(jù)文件大小限制結(jié)果。
          ...

          三、fd 快速上手演示

          為了能讓之后的演示有一個(gè)統(tǒng)一的認(rèn)識,我這里新建了一個(gè)目錄作為 fd 的測試目錄,我虛構(gòu)了一些文件和目錄來模擬實(shí)際情況,包括一個(gè)隱藏目錄,我之后的演示都會基于該根目錄下,選項(xiàng)如果有短名稱和長名稱,示例中以短名稱為例。

          該目錄大致是這樣:

          .
          ├──?.hg
          │???├──?HelloDjango.md
          │???├──?HelloRust.md
          │???├──?HelloVue.md
          │???├──?HelloZooKeeper.md
          ├──?dir1
          │???├──?Hello.java
          │???├──?World.java
          │???└──?dir2
          │???????├──?demo.py
          │???????├──?demo1.py
          │???????├──?dir3
          │???????│???├──?fd_demo.rs
          │???????│???└──?fd_help.rs
          │???????└──?sss.py
          ├──?hello_fd.md
          ├──?hello_java.md
          ├──?java
          │???├──?Hello.java
          │???└──?World.java
          ├──?my_java.txt
          ├──?python
          │???├──?demo.py
          │???├──?demo1.py
          │???└──?sss.py
          └──?rust
          │???├──?fd_demo.rs
          │???└──?fd_help.rs
          ├──?softdir3?->?dir1/dir2/dir3
          └──?sss.py?->?dir1/dir2/sss.py

          3.1 簡單搜索

          fd 直接跟想要搜索的內(nèi)容,會遞歸搜索當(dāng)前目錄下的所有文件,列出文件名中包含目標(biāo)內(nèi)容的結(jié)果(結(jié)果為當(dāng)前目錄的相對路徑)

          $?fd?Hello
          dir1/Hello.java
          java/Hello.java

          3.2 包含隱藏目錄

          選項(xiàng) -H --hidden

          $?fd?-H?Hello
          .hg/HelloDjango.md
          .hg/HelloRust.md
          .hg/HelloVue.md
          .hg/HelloZooKeeper.md
          dir1/Hello.java
          java/Hello.java

          3.3 大小寫

          默認(rèn) fd 是匹配智能大小寫的,如果你搜索的內(nèi)容是包含大寫會按照大小寫精確匹配,但如果是小寫會忽略大小寫匹配,所以 fd 另外提供了兩種選項(xiàng)來嚴(yán)格控制大小寫匹配

          選項(xiàng) -i --ignore-case 忽略大小寫。

          $?fd?-i?Hello
          dir1/Hello.java
          hello_fd.md
          hello_java.md
          java/Hello.java

          選項(xiàng) -s --case-sensitive 嚴(yán)格匹配大小寫。

          $?fd?-s?hello
          hello_fd.md
          hello_java.md

          3.4 返回絕對路徑

          選項(xiàng) -a --absolute-path

          $?fd?-a?Hello
          /Users/junjiexun/fd_test/dir1/Hello.java
          /Users/junjiexun/fd_test/java/Hello.java

          3.5 返回文件列表詳情

          選項(xiàng) -l --list-details 獲得類似 ls -l 的效果。

          $?fd?-l?hello
          -rw-r--r--??1?junjiexun??staff?????0B??3??1?18:42?dir1/Hello.java
          -rw-r--r--??1?junjiexun??staff?????0B??3??1?18:37?hello_fd.md
          -rw-r--r--??1?junjiexun??staff?????0B??3??1?18:37?hello_java.md
          -rw-r--r--??1?junjiexun??staff?????0B??3??1?18:38?java/Hello.java

          3.6 搜索內(nèi)容包含路徑

          選項(xiàng) -p --full-path 不單單搜索文件名,還列出目錄中包含目標(biāo)內(nèi)容的結(jié)果。

          因?yàn)檫@個(gè)測試的目錄就在 /Users/junjiexun 下面,所以這樣搜索相當(dāng)于全部的文件都會被搜索出來。

          $?fd?xun
          Nothing?return...
          $?fd?-p?xun
          dir1
          dir1/Hello.java
          dir1/World.java
          dir1/dir2
          ...(略)

          3.7 包括 .gitignore 里的文件

          選項(xiàng) -I --no-ignore 我這里新建了一個(gè) .gitignore 文件內(nèi)容只有一個(gè) *.java 用來演示,并且需要把當(dāng)前目錄通過 git init 初始化成 git 的項(xiàng)目。

          不加該參數(shù),可以看到結(jié)果集中 .java 的文件都被過濾了。

          $?fd?java
          hello_java.md
          java
          my_java.txt

          加上了 -I 之后結(jié)果中又包括了 .java 結(jié)尾的文件了。

          $?fd?-I?java
          dir1/Hello.java
          dir1/World.java
          hello_java.md
          java
          java/Hello.java
          java/World.java
          my_java.txt

          -I 功能我演示完了,為了之后的演示,我將 .gitignore.git 目錄給刪除了。

          這些簡單的功能已經(jīng)可以滿足一半的日常搜索需求了,接下來我們看看 fd 提供的更高級的搜索選項(xiàng)吧!

          四、高級搜索選項(xiàng)

          4.1 按深度

          選項(xiàng) -d --max-depth ,當(dāng)前路徑算深度 1,dir3 下面的 rs 文件就是深度 4 了。

          $?fd?rs
          dir1/dir2/dir3/fd_demo.rs
          dir1/dir2/dir3/fd_help.rs
          rust/fd_demo.rs
          rust/fd_help.rs
          $?fd?-d?3?rs
          rust/fd_demo.rs
          rust/fd_help.rs

          4.2 按文件類型

          選項(xiàng) -t --type ,fd 提供了以下幾種 filetype 選項(xiàng):

          • f:file
          • d:directory
          • l:symlink
          • x:executable
          • e:empty
          • s:socket
          • p:pipe
          $?fd?-t?l
          softdir3
          sss.py
          $?fd?-t?d
          dir1
          dir1/dir2
          dir1/dir2/dir3
          java
          python
          rust

          我給所有的 py 文件都加了可執(zhí)行權(quán)限

          $?fd?-t?x
          python/demo.py
          python/demo1.py
          python/sss.py

          4.3 按擴(kuò)展名

          選項(xiàng) -e --extension

          $?fd?-e?md
          hello_fd.md
          hello_java.md

          4.4 排除

          選項(xiàng) -E --exclude 支持通配符,排除所有包含字母 s 的結(jié)果。

          $?fd?-E?'*s*'
          dir1
          dir1/Hello.java
          dir1/World.java
          dir1/dir2
          dir1/dir2/demo.py
          dir1/dir2/demo1.py
          dir1/dir2/dir3
          hello_fd.md
          hello_java.md
          java
          java/Hello.java
          java/World.java
          my_java.txt
          python
          python/demo.py
          python/demo1.py

          可以看到所有的 rust、rs、sss、soft 都沒有出現(xiàn)在結(jié)果集中。

          4.5 按所有者

          選項(xiàng) -o --owner

          $?fd?-l?-o?junjiexun
          drwxr-xr-x??5?junjiexun??staff???160B??3??1?18:42?dir1
          -rw-r--r--??1?junjiexun??staff?????0B??3??1?18:42?dir1/Hello.java
          -rw-r--r--??1?junjiexun??staff?????0B??3??1?18:42?dir1/World.java
          drwxr-xr-x??6?junjiexun??staff???192B??3??1?18:42?dir1/dir2
          -rw-r--r--??1?junjiexun??staff?????0B??3??1?18:42?dir1/dir2/demo.py
          ...(略)

          或者 fd -l -o junjiexun:staff 也可以達(dá)到同樣的效果,但是 fd 不支持單獨(dú)搜索 group,也不支持通配符,如果你有想法的話可以給他提 issue 哦~

          4.6 組合命令

          fd 提供了 -x--exec 、-X--exec-batch 來進(jìn)行對搜索結(jié)果集的進(jìn)一步處理

          找到所有和 java 匹配的內(nèi)容并且刪除?。▋H僅用做演示,rm -rf 慎用)

          $?fd?java?-X?rm?-rf

          找到所有的 py 并且通過 vim 打開

          $?fd?py?-X?vim

          還可以使用諸如 unzipls、convert 等等其他常用的命令,也可以直接使用 *unix 語法 | 管道符語法進(jìn)一步處理。

          4.7 正則表達(dá)式

          對于文件的內(nèi)容搜索,我之前演示的是諸如 Hello、java、py 都是這樣的完整文本,實(shí)際 fd 默認(rèn)就是支持正則表達(dá)式對內(nèi)容進(jìn)行搜索的,但是正則表達(dá)式需要使用單引號 ' 包裹起來,我下面演示:將所有 s 開頭的文件都能被搜索出來。

          $?fd?'^s.*'
          dir1/dir2/sss.py
          python/sss.py
          softdir3
          sss.py

          如果你不想使用正則表達(dá)式,想換成更簡單的通配符匹配的話就可以使用選項(xiàng) -g--glob 可以達(dá)到同樣的效果。

          $?fd?-g?'s*'
          dir1/dir2/sss.py
          python/sss.py
          softdir3
          sss.py

          上面的選項(xiàng)大部分都是可以同時(shí)使用的,篇幅有限我這里就不繼續(xù)演示了。

          五、總結(jié)

          fd 是一個(gè)簡單友好的命令行文件搜索工具,而且其開源的屬性作為 Rust 源碼學(xué)習(xí)的對象也是非常優(yōu)秀的,趕緊學(xué)起來吧!

          本文源碼:https://github.com/HelloGitHub-Team/Article

          如果你也對開源項(xiàng)目感興趣,希望自己的文章或項(xiàng)目被更多人喜歡,點(diǎn)擊{閱讀原文}加入講解開源項(xiàng)目》我們一起分享有趣、入門級的開源項(xiàng)目吧!

          ?? 關(guān)注「HelloGitHub」第一時(shí)間收到更新??

          瀏覽 53
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天操天天综合 | 成人淫色 | 色婷婷婷 | 日韩 精品 无码 系列 视频 | chengrenavyingyin |