sharkdp/fd

GitHub: sharkdp/fd

fd 是一个用 Rust 编写的高性能文件搜索工具,是 Unix find 命令的现代替代品,专注于速度和易用性。

Stars: 41966 | Forks: 989

# fd [![CICD](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/95b1ce1bd2141431.svg)](https://github.com/sharkdp/fd/actions/workflows/CICD.yml) [![版本信息](https://img.shields.io/crates/v/fd-find.svg)](https://crates.io/crates/fd-find) [[中文](https://github.com/cha0ran/fd-zh)] [[한국어](https://github.com/spearkkk/fd-kor)] `fd` 是一个用于在文件系统中查找条目的程序。 它是 [`find`](https://www.gnu.org/software/findutils/) 的一个简单、快速且用户友好的替代品。 虽然它并不旨在支持 `find` 的所有强大功能,但它为绝大多数用例提供了合理(有主见)的默认设置。 [安装](#installation) • [使用方法](#how-to-use) • [故障排除](#troubleshooting) ## 功能特性 * 直观的语法:使用 `fd PATTERN` 而不是 `find -iname '*PATTERN*'`。 * 支持正则表达式(默认)和基于 glob 的模式。 * 由于并行化的目录遍历,速度[非常快](#benchmark)。 * 使用颜色高亮显示不同的文件类型(同 `ls`)。 * 支持[并行命令执行](#command-execution) * 智能大小写:默认情况下搜索不区分大小写。如果模式包含大写字符[\*](http://vimdoc.sourceforge.net/htmldoc/options.html#'smartcase'),则切换为区分大小写。 * 默认情况下忽略隐藏的目录和文件。 * 默认情况下忽略 `.gitignore` 中的模式。 * 命令名称比 `find` 短了 *50%*[\*](https://github.com/ggreer/the_silver_searcher) :-). ## 演示 ![Demo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/992e7fa903141431.svg) ## 如何使用 首先,要获取所有可用命令行选项的概览,您可以运行 [`fd -h`](#command-line-options) 获取简洁的帮助信息,或者运行 `fd --help` 获取更详细的版本。 ### 简单搜索 *fd* 旨在查找文件系统中的条目。您可以执行的最基本的搜索是使用单个参数运行 *fd*:即搜索模式。例如,假设您想找到您的一个旧脚本(名称中包含 `netflix`): ``` > fd netfl Software/python/imdb-ratings/netflix-details.py ``` 如果像这样只用一个参数调用,*fd* 会在当前目录中递归搜索任何*包含*模式 `netfl` 的条目。 ### 正则表达式搜索 搜索模式被视为正则表达式。在这里,我们搜索以 `x` 开头并以 `rc` 结尾的条目: ``` > cd /etc > fd '^x.*rc$' X11/xinit/xinitrc X11/xinit/xserverrc ``` `fd` 使用的正则表达式语法在[这里有文档说明](https://docs.rs/regex/latest/regex/#syntax)。 ### 指定根目录 如果我们想搜索特定的目录,可以将其作为 *fd* 的第二个参数给出: ``` > fd passwd /etc /etc/default/passwd /etc/pam.d/passwd /etc/passwd ``` ### 递归列出所有文件 *fd* 可以在没有参数的情况下调用。这对于快速概览当前目录中的所有条目(递归地)非常有用(类似于 `ls -R`): ``` > cd fd/tests > fd testenv testenv/mod.rs tests.rs ``` 如果您想使用此功能列出给定目录中的所有文件,则必须使用通配模式,例如 `.` 或 `^`: ``` > fd . fd/tests/ testenv testenv/mod.rs tests.rs ``` ### 搜索特定的文件扩展名 通常,我们对特定类型的所有文件感兴趣。这可以使用 `-e`(或 `--extension`)选项来完成。在这里,我们在 fd 仓库中搜索所有 Markdown 文件: ``` > cd fd > fd -e md CONTRIBUTING.md README.md ``` `-e` 选项可以与搜索模式结合使用: ``` > fd -e rs mod src/fshelper/mod.rs src/lscolors/mod.rs tests/testenv/mod.rs ``` ### 搜索特定的文件名 要查找与提供的搜索模式完全匹配的文件,请使用 `-g`(或 `--glob`)选项: ``` > fd -g libc.so /usr /usr/lib32/libc.so /usr/lib/libc.so ``` ### 隐藏文件和被忽略的文件 默认情况下,*fd* 不搜索隐藏目录,也不在搜索结果中显示隐藏文件。要禁用此行为,我们可以使用 `-H`(或 `--hidden`)选项: ``` > fd pre-commit > fd -H pre-commit .git/hooks/pre-commit.sample ``` 如果我们在一个 Git 仓库(或包含 Git 仓库)的目录中工作,*fd* 不会搜索(也不会显示)匹配 `.gitignore` 模式之一的文件夹(和文件)。要禁用此行为,我们可以使用 `-I`(或 `--no-ignore`)选项: ``` > fd num_cpu > fd -I num_cpu target/debug/deps/libnum_cpus-f5ce7ef99006aa05.rlib ``` 要真正搜索*所有*文件和目录,只需结合隐藏和忽略功能来显示所有内容(`-HI`)或使用 `-u`/`--unrestricted`。 ### 匹配完整路径 默认情况下,*fd* 仅匹配每个文件的文件名。但是,使用 `--full-path` 或 `-p` 选项,您可以匹配完整路径。 ``` > fd -p -g '**/.git/config' > fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)' ``` ### 执行命令 除了仅显示搜索结果外,您通常还想对它们*做点什么*。`fd` 提供了两种方法来为每个搜索结果执行外部命令: * `-x`/`--exec` 选项为*每个搜索结果*运行一个外部命令(并行)。 * `-X`/`--exec-batch` 选项启动一次外部命令,并将*所有搜索结果作为参数*。 #### 示例 递归查找所有 zip 归档文件并解压它们: ``` fd -e zip -x unzip ``` 如果有两个这样的文件,`file1.zip` 和 `backup/file2.zip`,这将执行 `unzip file1.zip` 和 `unzip backup/file2.zip`。这两个 `unzip` 进程并行运行(如果文件发现得够快)。 查找所有 `*.h` 和 `*.cpp` 文件,并使用 `clang-format -i` 对其进行原地自动格式化: ``` fd -e h -e cpp -x clang-format -i ``` 注意 `clang-format` 的 `-i` 选项是如何作为单独的参数传递的。这就是我们将 `-x` 选项放在最后的原因。 查找所有 `test_*.py` 文件并在您喜欢的编辑器中打开它们: ``` fd -g 'test_*.py' -X vim ``` 请注意,我们在这里使用大写的 `-X` 来打开单个 `vim` 实例。如果有两个这样的文件,`test_basic.py` 和 `lib/test_advanced.py`,这将运行 `vim test_basic.py lib/test_advanced.py`。 要查看文件权限、所有者、文件大小等详细信息,您可以告诉 `fd` 通过为每个结果运行 `ls` 来显示它们: ``` fd … -X ls -lhd --color=always ``` 这种模式非常有用,因此 `fd` 提供了一个快捷方式。您可以使用 `-l`/`--list-details` 选项以这种方式执行 `ls`:`fd … -l`。 `-X` 选项在将 `fd` 与 [ripgrep](https://github.com/BurntSushi/ripgrep/) (`rg`) 结合使用时也很有用,以便在某类文件中进行搜索,例如所有 C++ 源文件: ``` fd -e cpp -e cxx -e h -e hpp -X rg 'std::cout' ``` 将所有 `*.jpg` 文件转换为 `*.png` 文件: ``` fd -e jpg -x convert {} {.}.png ``` 在这里,`{}` 是搜索结果的占位符。`{.}` 也是如此,但没有文件扩展名。有关占位符语法的更多详细信息,请参见下文。 使用 `-x` 从并行线程运行的命令的终端输出不会交错或乱码,因此 `fd -x` 可用于粗略地并行化在许多文件上运行的任务。 这方面的一个例子是计算目录中每个文件的校验和。 ``` fd -tf -x md5sum > file_checksums.txt ``` #### 占位符语法 `-x` 和 `-X` 选项将*命令模板*作为一系列参数(而不是单个字符串)。如果您想在命令模板之后向 `fd` 添加其他选项,可以使用 `\;` 终止它。 生成命令的语法类似于 [GNU Parallel](https://www.gnu.org/software/parallel/): - `{}`: 将被替换为搜索结果路径的占位符标记 (`documents/images/party.jpg`)。 - `{.}`: 类似于 `{}`,但没有文件扩展名 (`documents/images/party`)。 - `{/}`: 将被替换为搜索结果的基本名称 (`party.jpg`) 的占位符。 - `{//}`: 发现路径的父目录 (`documents/images`)。 - `{/.}`: 基本名称,移除了扩展名 (`party`)。 如果您不包含占位符,*fd* 会自动在末尾添加一个 `{}`。 #### 并行与串行执行 对于 `-x`/`--exec`,您可以使用 `-j`/`--threads` 选项控制并行作业的数量。使用 `--threads=1` 进行串行执行。 ### 排除特定的文件或目录 有时我们想忽略来自特定子目录的搜索结果。例如,我们可能想要搜索所有隐藏的文件和目录(`-H`),但排除 `.git` 目录中的所有匹配项。我们可以使用 `-E`(或 `--exclude`)选项来实现。它接受一个任意的 glob 模式作为参数: ``` > fd -H -E .git … ``` 我们也可以使用它来跳过挂载的目录: ``` > fd -E /mnt/external-drive … ``` .. 或者跳过某些文件类型: ``` > fd -E '*.bak' … ``` 要使此类排除模式永久生效,您可以创建一个 `.fdignore` 文件。它们的工作方式类似于 `.gitignore` 文件,但是特定于 `fd`。例如: ``` > cat ~/.fdignore /mnt/external-drive *.bak ``` 如果您希望 `fd` 全局忽略这些模式,可以将它们放在 `fd` 的全局忽略文件中。这通常位于 macOS 或 Linux 的 `~/.config/fd/ignore`,以及 Windows 的 `%APPDATA%\fd\ignore`。 您可能希望在 `fd/ignore` 文件中包含 `.git/`,这样如果您使用 `--hidden` 选项,`.git` 目录及其内容就不会包含在输出中。 ### 删除文件 您可以使用 `fd` 删除所有与您的搜索模式匹配的文件和目录。 如果您只想删除文件,可以使用 `--exec-batch`/`-X` 选项来调用 `rm`。例如,要递归删除所有 `.DS_Store` 文件,请运行: ``` > fd -H '^\.DS_Store$' -tf -X rm ``` 如果您不确定,请始终先运行不带 `-X rm` 的 `fd`。或者,使用 `rm` 的“交互式”选项: ``` > fd -H '^\.DS_Store$' -tf -X rm -i ``` 如果您还想删除某类目录,可以使用相同的技术。您必须使用 `rm` 的 `--recursive`/`-r` 标志来删除目录。 ### 命令行选项 这是 `fd -h` 的输出。要查看完整的命令行选项集,请使用 `fd --help`,其中还包括更详细的帮助文本。 ``` Usage: fd [OPTIONS] [pattern [path]...] Arguments: [pattern] the search pattern (a regular expression, unless '--glob' is used; optional) [path]... the root directories for the filesystem search (optional) Options: -H, --hidden Search hidden files and directories -I, --no-ignore Do not respect .(git|fd)ignore files -s, --case-sensitive Case-sensitive search (default: smart case) -i, --ignore-case Case-insensitive search (default: smart case) -g, --glob Glob-based search (default: regular expression) -a, --absolute-path Show absolute instead of relative paths -l, --list-details Use a long listing format with file metadata -L, --follow Follow symbolic links -p, --full-path Search full abs. path (default: filename only) -d, --max-depth Set maximum search depth (default: none) -E, --exclude Exclude entries that match the given glob pattern -t, --type Filter by type: file (f), directory (d/dir), symlink (l), executable (x), empty (e), socket (s), pipe (p), char-device (c), block-device (b) -e, --extension Filter by file extension -S, --size Limit results based on the size of files --changed-within Filter by file modification time (newer than) --changed-before Filter by file modification time (older than) -o, --owner Filter by owning user and/or group --format Print results according to template -x, --exec ... Execute a command for each search result -X, --exec-batch ... Execute a command with all search results at once -c, --color When to use colors [default: auto] [possible values: auto, always, never] --hyperlink[=] Add hyperlinks to output paths [default: never] [possible values: auto, always, never] --ignore-contain Ignore directories containing the named entry -h, --help Print help (see more with '--help') -V, --version Print version ``` 请注意,选项也可以在模式和/或路径之后给出。 ## 基准测试 让我们在我的主文件夹中搜索以 `[0-9].jpg` 结尾的文件。它包含约 750,000 个子目录和约 400 万个文件。为了进行平均和统计分析,我使用了 [hyperfine](https://github.com/sharkdp/hyperfine)。以下基准测试是在“热”/预填充的磁盘缓存下进行的(“冷”磁盘缓存的结果显示出相同的趋势)。 让我们从 `find` 开始: ``` Benchmark 1: find ~ -iregex '.*[0-9]\.jpg$' Time (mean ± σ): 19.922 s ± 0.109 s Range (min … max): 19.765 s … 20.065 s ``` 如果不需要执行正则表达式搜索,`find` 会快得多: ``` Benchmark 2: find ~ -iname '*[0-9].jpg' Time (mean ± σ): 11.226 s ± 0.104 s Range (min … max): 11.119 s … 11.466 s ``` 现在让我们对 `fd` 尝试相同的操作。请注意,`fd` 默认执行正则表达式搜索。为了进行公平比较,这里需要 `-u`/`--unrestricted` 选项。否则 `fd` 不必遍历隐藏文件夹和忽略的路径(见下文): ``` Benchmark 3: fd -u '[0-9]\.jpg$' ~ Time (mean ± σ): 854.8 ms ± 10.0 ms Range (min … max): 839.2 ms … 868.9 ms ``` 对于这个特定示例,`fd` 比 `find -iregex` 快大约 **23 倍**,比 `find -iname` 快大约 **13 倍**。顺便说一句,这两个工具都找到了完全相同的 546 个文件 :smile:。 **注意**:这是*一台特定*机器上的*一个特定*基准测试。虽然我们进行了大量不同的测试(并发现结果一致),但您的情况可能会有所不同!我们鼓励大家在自己的机器上尝试。有关所有必要的脚本,请参阅[此仓库](https://github.com/sharkdp/fd-benchmarks)。 关于 *fd* 的速度,很大程度上归功于 `regex` 和 `ignore` crates,它们也被用于 [ripgrep](https://github.com/BurntSushi/ripgrep)(快去看看吧!)。 ## 故障排除 ### `fd` 找不到我的文件! 请记住,`fd` 默认忽略隐藏目录和文件。它还忽略 `.gitignore` 文件中的模式。如果您想确保找到绝对所有可能的文件,请始终使用 `-u`/`--unrestricted` 选项(或 `-HI` 以启用隐藏和忽略文件): ``` > fd -u … ``` 还要记住,默认情况下,`fd` 仅根据文件名进行搜索,并不会将模式与完整路径进行比较。如果您想根据完整路径进行搜索(类似于 `find` 的 `-path` 选项),您需要使用 `--full-path`(或 `-p`)选项。 ### 彩色输出 `fd` 可以按扩展名为文件着色,就像 `ls` 一样。为了实现这一点,必须设置环境变量 [`LS_COLORS`](https://linux.die.net/man/5/dir_colors)。通常,此变量的值由 `dircolors` 命令设置,该命令提供了一种方便的配置格式来定义不同文件格式的颜色。 在大多数发行版中,`LS_COLORS` 应该已经设置好了。如果您使用的是 Windows,或者如果您正在寻找替代的、更完整(或更多彩)的变体,请参见[这里](https://github.com/sharkdp/vivid)、[这里](https://github.com/seebi/dircolors-solarized) 或 [这里](https://github.com/trapd00r/LS_COLORS)。 `fd` 也遵循 [`NO_COLOR`](https://no-color.org/) 环境变量。 ### `fd` 似乎没有正确解释我的 regex 模式 许多特殊的正则表达式字符(如 `[] `^`, `$`, ..)在您的 shell 中也是特殊字符。如果有疑问,请务必在正则表达式模式周围加上单引号: ``` > fd '^[A-Z][0-9]+$' ``` 如果您的模式以破折号开头,则必须添加 `--` 以表示命令行选项的结束。否则,该模式将被解释为命令行选项。或者,使用包含单个连字符字符的字符类: ``` > fd -- '-pattern' > fd '[-]pattern' ``` ### `alias` 或 shell 函数的“找不到命令” Shell `alias` 和 shell 函数不能用于通过 `fd -x` 或 `fd -X` 执行命令。在 `zsh` 中,您可以通过 `alias -g myalias="…"` 使别名全局化。在 `bash` 中,您可以使用 `export -f my_function` 使其对子进程可用。您仍然需要调用 `fd -x bash -c 'my_function "$1"' bash`。对于其他用例或 shell,请使用(临时)shell 脚本。 ## 与其他程序集成 ### 将 fd 与 `fzf` 结合使用 您可以使用 *fd* 为命令行模糊查找器 [fzf](https://github.com/junegunn/fzf) 生成输入: ``` export FZF_DEFAULT_COMMAND='fd --type file' export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" ``` 然后,您可以在终端上键入 `vim ` 来打开 fzf 并搜索 fd 的结果。或者,您可能希望遵循符号链接并包含隐藏文件(但排除 `.git` 文件夹): ``` export FZF_DEFAULT_COMMAND='fd --type file --follow --hidden --exclude .git' ``` 您甚至可以通过设置以下内容在 fzf 内部使用 fd 的彩色输出: ``` export FZF_DEFAULT_COMMAND="fd --type file --color=always" export FZF_DEFAULT_OPTS="--ansi" ``` 有关更多详细信息,请参阅 fzf README 的 [Tips 部分](https://github.com/junegunn/fzf#tips)。 ### 将 fd 与 `rofi` 结合使用 [*rofi*](https://github.com/davatorium/rofi) 是一个图形化启动菜单应用程序,能够通过从 *stdin* 读取来创建菜单。将 `fd` 输出通过管道传输到 `rofi` 的 `-dmenu` 模式可创建文件和目录的模糊可搜索列表。 #### 示例 在 `$HOME` 目录下创建一个不区分大小写可搜索的 *PDF* 文件多选列表,并使用您配置的 PDF 查看器打开所选内容。要列出所有文件类型,请去掉 `-e pdf` 参数。 ``` fd --type f -e pdf . $HOME | rofi -keep-right -dmenu -i -p FILES -multi-select | xargs -I {} xdg-open {} ``` 要修改 rofi 显示的列表,请向 `fd` 命令添加参数。要修改 rofi 的搜索行为,请向 `rofi` 命令添加参数。 ### 将 fd 与 `emacs` 结合使用 emacs 包 [find-file-in-project](https://github.com/technomancy/find-file-in-project) 可以使用 *fd* 来查找文件。 安装 `find-file-in-project` 后,将行 `(setq ffip-use-rust-fd t)` 添加到您的 `~/.emacs` 或 `~/.emacs.d/init.el` 文件中。 在 emacs 中,运行 `M-x find-file-in-project-by-selected` 以查找匹配的文件。或者运行 `M-x find-file-in-project` 列出项目中的所有可用文件。 ### 将输出打印为树 要将 `fd` 的输出格式化为文件树,您可以使用带有 `--fromfile` 选项的 `tree` 命令: ``` ❯ fd | tree --fromfile ``` 这可能比单独运行 `tree` 更有用,因为 `tree` 默认不会忽略任何文件,也不支持像 `fd` 那样丰富的选项集来控制打印内容: ``` ❯ fd --extension rs | tree --fromfile . ├── build.rs └── src ├── app.rs └── error.rs ``` 在 bash 和类似环境中,您只需创建一个别名: ``` ❯ alias as-tree='tree --fromfile' ``` ### 将 fd 与 `xargs` 或 `parallel` 结合使用 请注意,`fd` 具有用于[命令执行](#command-execution)的内置功能,即其 `-x`/`--exec` 和 `-X`/`--exec-batch` 选项。如果您愿意,您仍然可以将其与 `xargs` 结合使用: ``` > fd -0 -e rs | xargs -0 wc -l ``` 在这里,`-0` 选项告诉 *fd* 用 NULL 字符(而不是换行符)分隔搜索结果。同样,`xargs` 的 `-0` 选项告诉它以这种方式读取输入。 ## 安装 [![打包状态](https://repology.org/badge/vertical-allrepos/fd-find.svg)](https://repology.org/project/fd-find/versions) ### 在 Ubuntu 上 *... 以及其他基于 Debian 的 Linux 发行版。* 如果您运行的是 Ubuntu 19.04 (Disco Dingo) 或更新版本,您可以安装[官方维护的软件包](https://packages.ubuntu.com/fd-find): ``` apt install fd-find ``` 请注意,该二进制文件名为 `fdfind`,因为二进制文件名 `fd` 已被另一个软件包使用。建议安装后,通过执行命令 `ln -s $(which fdfind) ~/.local/bin/fd` 添加指向 `fd` 的链接,以便以与本文档相同的方式使用 `fd`。请确保 `$HOME/.local/bin` 在您的 `$PATH` 中。 如果您使用旧版本的 Ubuntu,可以从[发布页面](https://github.com/sharkdp/fd/releases)下载最新的 `.deb` 软件包并通过以下方式安装: ``` dpkg -i fd_9.0.0_amd64.deb # adapt version number and architecture ``` 请注意,此项目发布页面上的 .deb 软件包仍将可执行文件命名为 `fd`。 ### 在 Debian 上 如果您运行的是 Debian Buster 或更新版本,您可以安装[官方维护的 Debian 软件包](https://tracker.debian.org/pkg/rust-fd-find): ``` apt-get install fd-find ``` 请注意,该二进制文件名为 `fdfind`,因为二进制文件名 `fd` 已被另一个软件包使用。建议安装后,通过执行命令 `ln -s $(which fdfind) ~/.local/bin/fd` 添加指向 `fd` 的链接,以便以与本文档相同的方式使用 `fd`。请确保 `$HOME/.local/bin` 在您的 `$PATH` 中。 请注意,此项目发布页面上的 .deb 软件包仍将可执行文件命名为 `fd`。 ### 在 Fedora 上 从 Fedora 28 开始,您可以从官方软件源安装 `fd`: ``` dnf install fd-find ``` ### 在 Alpine Linux 上 您可以从官方软件源安装 [fd 软件包](https://pkgs.alpinelinux.org/packages?name=fd),前提是您启用了适当的软件源: ``` apk add fd ``` ### 在 Arch Linux 上 您可以从官方软件源安装 [fd 软件包](https://www.archlinux.org/packages/extra/x86_64/fd/): ``` pacman -S fd ``` 您也可以[从 AUR](https://aur.archlinux.org/packages/fd-git) 安装 fd。 ### 在 Gentoo Linux 上 您可以使用官方软件源中的 [fd ebuild](https://packages.gentoo.org/packages/sys-apps/fd): ``` emerge -av fd ``` ### 在 openSUSE Linux 上 您可以从官方软件源安装 [fd 软件包](https://software.opensuse.org/package/fd): ``` zypper in fd ``` ### 在 Void Linux 上 您可以通过 xbps-install 安装 `fd`: ``` xbps-install -S fd ``` ### 在 ALT Linux 上 您可以从官方软件源安装 [fd 软件包](https://packages.altlinux.org/en/sisyphus/srpms/fd/): ``` apt-get install fd ``` ### 在 Solus 上 您可以从官方软件源安装 [fd 软件包](https://github.com/getsolus/packages/tree/main/packages/f/fd): ``` eopkg install fd ``` ### 在 RedHat Enterprise Linux (RHEL) 8/9/10, Almalinux 8/9/10, EuroLinux 8/9 或 Rocky Linux 8/9/10 上 您可以从 Fedora Copr 安装 [`fd` 软件包](https://copr.fedorainfracloud.org/coprs/tkbcopr/fd/)。 ``` dnf copr enable tkbcopr/fd dnf install fd ``` EPEL8/9 软件源中也提供了一个使用[较慢的](https://github.com/sharkdp/fd/pull/481#issuecomment-534494592) malloc [而不是 jemalloc](https://bugzilla.redhat.com/show_bug.cgi?id=2216193#c1) 的不同版本,软件包名为 `fd-find`。 ### 在 macOS 上 您可以使用 [Homebrew](https://formulae.brew.sh/formula/fd) 安装 `fd`: ``` brew install fd ``` … 或者使用 MacPorts: ``` port install fd ``` ### 在 Windows 上 您可以从[发布页面](https://github.com/sharkdp/fd/releases)下载预构建的二进制文件。 或者,您可以通过 [Scoop](http://scoop.sh) 安装 `fd`: ``` scoop install fd ``` 或者通过 [Chocolatey](https://chocolatey.org): ``` choco install fd ``` 或者通过 [Winget](https://learn.microsoft.com/en-us/windows/package-manager/): ``` winget install sharkdp.fd ``` ### 在 GuixOS 上 您可以从官方软件源安装 [fd 软件包](https://guix.gnu.org/en/packages/fd-8.1.1/): ``` guix install fd ``` ### 在 Mise 上 您可以使用 [mise](https://github.com/jdx/mise) 使用类似这样的命令安装 `fd`: ``` mise use -g fd@latest ``` ### 在 NixOS 上 / 通过 Nix 您可以使用 [Nix 软件包管理器](https://nixos.org/nix/) 安装 `fd`: ``` nix-env -i fd ``` ### 通过 Flox 您可以使用 [Flox](https://flox.dev) 将 `fd` 安装到 Flox 环境中: ``` flox install fd ``` ### 在 FreeBSD 上 您可以从官方软件源安装 [fd-find 软件包](https://www.freshports.org/sysutils/fd): ``` pkg install fd-find ``` ### 通过 npm 在 Linux 和 macOS 上,您可以安装 [fd-find](https://npm.im/fd-find) 软件包: ``` npm install -g fd-find ``` ### 从源代码构建 使用 Rust 的软件包管理器 [cargo](https://github.com/rust-lang/cargo),您可以通过以下方式安装 *fd*: ``` cargo install fd-find ``` 请注意,需要 Rust 版本 *1.77.2* 或更高版本。构建还需要 `make`。 ### 从二进制文件 [发布页面](https://github.com/sharkdp/fd/releases) 包含适用于 Linux、macOS 和 Windows 的预编译二进制文件。还提供了静态链接的二进制文件:寻找文件名中带有 `musl` 的归档文件。 ## 开发 ``` git clone https://github.com/sharkdp/fd # 构建 cd fd cargo build # 运行单元测试和集成测试 cargo test # 安装 cargo install --path . ``` ### 补全 #### 从发布归档中 预构建的补全文件包含在[发布页面](https://github.com/sharkdp/fd/releases)上的发布归档文件(`.tar.gz`/`.zip`)中,位于 `autocomplete` 目录下。 要使用这些补全: - **bash**: 在您的 `~/.bashrc` 中 source `fd.bash` 文件,或将其放在自动 source 的目录中。 - **zsh**: 将 `_fd` 移动到 `fpath` 中的目录(例如 `~/.zfunc`)。 - **fish**: 将 `fd.fish` 复制到 `~/.config/fish/completions/`。 - **powershell**: 从您的 [profile 脚本](https://learn.microsoft.com/en-us/powershell/scripting/learn/shell/creating-profiles?view=powershell-7.5)之一 source `_fd.ps1`。 #### 从 fd 生成 您还可以使用 `fd --gen-completions ` 直接生成补全: ``` # Bash fd --gen-completions bash > ~/.local/share/bash-completion/completions/fd # Zsh (确保 ~/.zfunc 在你的 fpath 中) fd --gen-completions zsh > ~/.zfunc/_fd # Fish fd --gen-completions fish > ~/.config/fish/completions/fd.fish # PowerShell fd --gen-completions powershell >> $PROFILE ``` ## 维护者 - [sharkdp](https://github.com/sharkdp) - [tmccombs](https://github.com/tmccombs) - [tavianator](https://github.com/tavianator) ## 许可证 `fd` 根据 MIT 许可证和 Apache 许可证 2.0 的条款分发。有关许可证详细信息,请参阅 [LICENSE-APACHE](LICENSE-APACHE) 和 [LICENSE-MIT](LICENSE-MIT) 文件。
标签:Awesome, CLI, find替代, Git忽略, Rust, SOC Prime, WiFi技术, 代码搜索, 可视化界面, 并行计算, 开发工具, 性能优化, 搜索工具, 效率提升, 文件搜索, 文件查找, 文件系统, 智能搜索, 检测绕过, 生成式AI, 系统管理, 索引, 网络安全审计, 网络流量审计, 通知系统