在 Linux 上用 fd 代替 find
![](https://linuxstory.org/wp-content/uploads/2024/06/110546npqmttwobtqpo4qk-800x400.jpg)
許多 Linux 程序員在其工作中每天都在使用 find
命令。但是 find
給出的文件系統條目是有限的,如果你要進行大量的 find
操作,它甚至不是很快速。因此,我更喜歡使用 Rust 編寫的 fd
命令,因為它提供了合理的默認值,適用於大多數使用情況。
正如它的 README 所說,「fd
是一個在文件系統中尋找條目的程序。它是一個簡單、快速和用戶友好的 find
的替代品。」它的特點是目錄的並行遍歷,可以一次搜索多個目錄。它支持正則表達式(regex)和基於通配符的模式。
安裝 fd
在 Linux 上,你可以從你的軟體庫中安裝 fd
(可用的軟體包列表可以在 Repology 上的 fd 頁面 找到)。 例如,在 Fedora 上:
$ sudo dnf install fd-find
在 macOS 上,可以使用 MacPorts 或 Homebrew。
另外,你也可以使用 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
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive