Linux中國

Linux 中的模糊文件搜索

像 fzf 和 fzy 這樣的現代工具將 Linux 終端中的文件搜索提升到了一個新的水平。

在 Linux 命令行中,如何 搜索文件?你可以使用 find 命令。這是標準答案,沒有問題。

通常,你鍵入帶有搜索參數的命令,按回車鍵,然後它會顯示搜索結果。

你可以通過模糊搜索來提升終端中的文件搜索體驗。

模糊搜索是一種近似搜索演算法或技術。在這種搜索中,通過名稱搜索指定位置的文件,並實時顯示結果給用戶。

模糊搜索在網路搜索引擎中很受歡迎,用戶開始輸入術語後,它會開始顯示與該術語相關的結果。

在本文中,我將討論兩個命令行工具,它們可以讓你在 Linux 中執行模糊搜索:

  • fzf:模糊查找工具
  • fzy:模糊選擇工具

fzf:Linux 中的模糊查找工具

fzf 是一款可用於 Linux 的模糊搜索工具,你可以通過它進行互動式文件搜索。

在 Ubuntu 中安裝 fzf,打開終端並運行以下命令:

sudo apt install fzf

雖然 fzf 本身可以正常工作,但最好與其他工具配合使用,以充分發揮其功能。

使用 fzf

打開終端並運行:

fzf

這將打開一個 fzf 提示符,在當前工作目錄中搜索文件。

在終端中運行 fzf 命令

為 fzf 應用邊框

你可以使用 --border 選項為 fzf 應用邊框,有多種邊框可用,如 rounded(圓角)、sharp(尖角)等。

fzf --border=rounded

運行帶有邊框選項設置為 rounded 和 sharp 的 fzf 命令

應用背景和前景顏色

使用顏色屬性,你可以為 fzf 設置 ANSI 顏色,可以作為背景、前景或兩者都設置。

為 fzf 應用顏色,用戶指定了顏色

fzf --color="bg:black,fg:yellow"

你可以串聯這些選項,使 fzf 在視覺上更加美觀。

現在,讓我展示一些 fzf 模糊搜索的實際用法。

使用 fzf 在 Bash 歷史中進行搜索

當然,Bash 歷史記錄中有 CTRL+R 的反向搜索功能。但如果你想使用 fzf 來獲得更好的外觀,可以運行以下命令:

history | fzf

使用 fzf 模糊搜索在 bash 歷史中進行搜索

使用 fzf 結合 tree 命令

tree 命令 會列出文件和目錄,並顯示它們的層級關係。

使用 fzf 結合 tree 命令可以幫助你找到特定文件的絕對路徑。

tree -afR /home/$USER | fzf

運行 Tree 命令並將輸出傳遞給模糊搜索

? 上述命令會調用 tree 並以遞歸方式列出包括隱藏文件在內的所有文件(-a)。同時,-f 選項告訴 tree 列出完整路徑。

在 fzf 中預覽文件

有時,如果你可以獲得你搜索的文件的小型預覽,那會很有幫助。

幸運的是,fzf 提供了一個預覽選項。你可以使用 --preview 來訪問它。我在這裡使用 find 命令使其更加有用。

find /home/$USER -type f | fzf --preview 'less {}'

在這裡,當你滾動瀏覽結果時,它將使用 less 顯示文本文件。

? 如果你使用其他命令如 ls 等,請不要使用 -l 等選項,因為這將顯示額外的詳細信息(文件許可權)。這些額外的詳細信息會破壞 fzf 預覽所需的格式。在使用預覽功能時,輸入到 fzf 的應該只是文件名。

如果你已安裝了 bat,也可以使用它來預覽文件。

find /home/$USER -type f | fzf --preview 'bat --color always {}'

使用 bat 作為 FZF 預覽功能的文本查看器

對於 Ubuntu 用戶,可以使用 batcat 來調用 bat。因此運行:

find /home/$USER -type f | fzf --preview 'batcat --color always {}'

? 為這些命令創建別名,這樣你就不需要反覆輸入它們。

從任何地方使用 fzf 進入任何目錄(高級技巧)

這比以前要複雜一些。在這裡,你不能直接將 fzfcd 連接在一起,因為它們是不同的進程。

你可以創建一個別名並使用以下命令:

cd $(find /home/$USER -type d | fzf)

或者,你可以按照下面解釋的方法進行操作。

為此,你可能需要在 bashrc 中添加一個函數。讓我將這個函數稱為 finder。現在請添加以下行到你的 bashrc 中。

finder() {
  local dir
  dir=$(find required/location/to/search/and/enter -type d | fzf)
  if [[ -n "$dir" ]]; then
    cd "$dir" || return
  fi
}

現在,你應該 輸入路徑,其中包含你要搜索並進入的目錄。

例如,我已經使用 /home/$USER 替換了該部分,表示我要從任何位置進入我的主目錄中的任何目錄。

保存你的 bashrc 文件後,要麼重啟終端,要麼運行以下命令:

source ~/.bashrc

之後,你可以在終端上運行 finder 命令,一旦找到要進入的目錄,按回車鍵即可。

使用 fzf 命令結合 cd 命令進入任意目錄

將選擇內容複製到剪貼板

到目前為止,你已經了解了如何使用 fzf,它提供了搜索結果或預覽。

現在,如果你想要複製某個項目的位置,你不必手動執行此操作。也有相應的解決方案。

首先,確保你已經安裝了 xclip

sudo apt install xclip

然後像這樣將其傳遞給 xclip

fzf | xclip -selection clipboard

這將複製你按下回車鍵的那些行到剪貼板上。

其他用途

正如我之前所說,你可以使用任何涉及大量文本,並希望互動式搜索特定內容的命令。

  • cat ~/.bashrc | fzf - 在 Bashrc 文件中搜索
  • lsblk | fzf - 在鎖定設備列表中搜索
  • ps -aux | fzf - 在進程列表中搜索

另一個選擇:Fzy,模糊選擇器

fzf 不同,fzy 是一個模糊選擇器,它會根據輸入提供一個菜單供你選擇。

例如,如果你將 fzyls 命令一起使用,它將給你提供一個類似菜單的界面。

使用 ls 命令的 fzy 命令

默認情況下,它會顯示十個條目。

使用 fzy 進入目錄

fzf 類似,你也可以使用 fzy 進入當前工作目錄中的目錄:

cd $(find -type d | fzy)

使用任何編輯器打開文件

或者使用你喜歡的編輯器打開文件:

nano $(find -type f | fzy)

附加內容:自定義文件和圖像預覽

下面的命令將在 Ubuntu 中打開一個專門的自定義提示符,用於模糊搜索,你可以通過滾動來預覽文本文件。

find /home/$USER -type f | fzf --color="bg:black,fg:yellow" --preview 'batcat --color always {}' --preview-window=bottom

為了方便訪問,可以在你的 bashrc 文件中為此創建一個別名。

或者在使用 timg 命令行圖像查看器時,在 fzf 中進行圖像預覽並滾動。使用以下命令進行安裝:

sudo apt install timg

? 請注意,圖像查看器無法正確顯示圖像,因為這不是 fzf 預覽的主要目的。

fzf --preview 'timg -g 200x100 {}' --preview-window=right:90

對於那些喜歡折騰的人,可以嘗試對此部分進行優化。

現代化的替代方案

大多數 Linux 命令都是從 UNIX 時代繼承下來的。它們雖然老舊,但功能如預期。但這並不意味著它們不能改進。

我的意思是,你不需要重新發明輪子,但你總是可以努力改進輪子。

fzffzy 這樣的現代化工具將 Linux 終端中的文件搜索提升到了一個新的水平。以下是一些其他有趣的命令行工具。

我嘗試給出了這些模糊搜索工具的一些實際示例。希望你對它們感到足夠有啟發性。如果你打算使用它們,請在評論中告訴我。

(題圖:MJ/d25e71fa-f24e-49be-9579-e0520a8f6e18)

via: https://itsfoss.com/fuzzy-file-search-linux/

作者:Sreenath 選題:lkxed 譯者:ChatGPT 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國