Linux中國

在 Linux 上用 fd 代替 find

許多 Linux 程序員在其工作中每天都在使用 find 命令。但是 find 給出的文件系統條目是有限的,如果你要進行大量的 find 操作,它甚至不是很快速。因此,我更喜歡使用 Rust 編寫的 fd 命令,因為它提供了合理的默認值,適用於大多數使用情況。

正如它的 README 所說,「fd 是一個在文件系統中尋找條目的程序。它是一個簡單、快速和用戶友好的 find 的替代品。」它的特點是目錄的並行遍歷,可以一次搜索多個目錄。它支持正則表達式(regex)和基於通配符的模式。

安裝 fd

在 Linux 上,你可以從你的軟體庫中安裝 fd(可用的軟體包列表可以在 Repology 上的 fd 頁面 找到)。 例如,在 Fedora 上:

$ sudo dnf install fd-find

在 macOS 上,可以使用 MacPortsHomebrew

另外,你也可以使用 Rust 的 Cargo 軟體包管理器:

$ cargo install fd-find

使用 fd

要做一個簡單的搜索,運行 fd 並在後面跟上要搜索的名字,例如:

$ fd sh
registry/src/github.com-1ecc6299db9ec823/cc-1.0.67/src/bin/gcc-shim.rs
registry/src/github.com-1ecc6299db9ec823/exa-0.10.1/completions/completions.bash
registry/src/github.com-1ecc6299db9ec823/exa-0.10.1/completions/completions.fish
registry/src/github.com-1ecc6299db9ec823/exa-0.10.1/completions/completions.zsh
registry/src/github.com-1ecc6299db9ec823/exa-0.10.1/xtests/run.sh
registry/src/github.com-1ecc6299db9ec823/git2-0.13.18/src/stash.rs
registry/src/github.com-1ecc6299db9ec823/libc-0.2.94/src/unix/solarish
registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/cmake/SelectHashes.cmake
registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/include/git2/stash.h
registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/include/git2/sys/hashsig.h
registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/script/backport.sh
registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/script/leaks.sh
registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/script/valgrind.sh
registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.19+1.1.0/libgit2/src/config_snapshot.c
[...]

如果你想搜索一個特定的目錄,可以將目錄路徑作為 fd 的第二個參數,例如:

$ fd passwd /etc
/etc/pam.d/passwd
/etc/passwd
/etc/passwd-
/etc/security/opasswd

要搜索一個特定的文件擴展名,使用 -e 作為選項。例如:

$ fd . '/home/ssur/exa' -e md
/home/ssur/exa/README.md
/home/ssur/exa/devtools/README.md
/home/ssur/exa/man/exa.1.md
/home/ssur/exa/man/exa_colors.5.md
/home/ssur/exa/xtests/README.md
$

你也可以通過提供 -x-X 來執行一個命令。

  • -x/--exec:選項為每個搜索結果(並行)運行一個外部命令。
  • -X/--exec-batch:選項將所有搜索結果作為參數啟動一次外部命令。

例如,要遞歸地找到所有的 ZIP 檔案並解壓:

$ fd -e zip -x unzip

或者,要列出某個特定目錄下在過去 n 天內改變的所有文件,使用--changed-within 選項:

$ fd . '/home/ssur/Work/' --changed-within 10d
/home/ssur/Work/wildfly/connector/src/main/java/org/jboss/as/connector/subsystems/data_sources/JdbcDriverAdd.java
/home/ssur/Work/wildfly/connector/src/main/java/org/jboss/as/connector/subsystems/data_sources/JdbcExample.java
[...]

而要搜索所有在特定天數之前被修改的文件,請使用 --changed-before n 選項:

$ fd . '/home/ssur/Work/' --changed-before 365d

這裡,. 作為一個(正則)通配符,指示 fd 返回所有文件。

要了解更多關於 fd 的功能,請查閱 GitHub 上的 文檔

總結

我特別喜歡 fd 的一點是,搜索模式默認是不區分大小寫的,這使得它更容易找到東西,即使你對你要找的東西沒有精確的認識。更好的是,如果模式包含一個大寫的字元,它就會自動切換到大小寫敏感。

另一個好處是,它使用顏色編碼來突出不同的文件類型。

如果你已經在使用這個神奇的 Rust 工具,請在評論中告訴我們你的想法。

via: https://opensource.com/article/21/6/fd-linux

作者:Sudeshna Sur 選題:lujun9972 譯者:wxy 校對: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中國