fd 在鸿蒙PC上的构建与适配
本文介绍了文件搜索工具fd在鸿蒙PC端的构建与适配过程。fd是用Rust编写的高效文件搜索工具,相比传统find命令具有更直观的语法、正则表达式支持、极速搜索等优势。文章详细阐述了fd的核心特性、使用场景和常见问题解决方案,并重点讲解了在开源鸿蒙PC端的适配要点,包括构建脚本解析、HNP包配置以及构建结果验证。通过系统性的适配工作,fd成功实现了在鸿蒙PC端的运行,为开发者提供了高效的文件搜索解决
目录
fd 在鸿蒙PC上的构建与适配
目录
工具简介
fd 是一个用 Rust 编写的文件搜索工具,是传统 Unix find 命令的简单、快速、用户友好的替代品。fd 的设计理念是提供合理的默认设置,让大多数常见用例变得简单直观。
什么是 fd?
fd 是一个命令行工具,用于在文件系统中查找文件和目录。虽然它不旨在支持 find 的所有强大功能,但它为大多数用例提供了合理的(有主见的)默认设置。
核心优势:
- 简单直观:
fd PATTERN比find -iname '*PATTERN*'更简单 - 速度极快:并行化目录遍历,搜索速度远超传统 find
- 用户友好:智能默认设置,减少命令行参数
- 现代化:使用 Rust 编写,内存安全,性能优异
核心特性
-
直观的语法:
fd PATTERN替代find -iname '*PATTERN*'- 默认在当前目录递归搜索
- 模式匹配包含关系,而非精确匹配
-
正则表达式支持:
- 默认使用正则表达式模式
- 支持 glob 模式(使用
-g选项) - 完整的正则表达式语法支持
-
极速搜索:
- 并行化目录遍历
- 多线程处理,充分利用多核 CPU
- 比传统 find 快数倍
-
颜色高亮:
- 使用颜色区分不同类型的文件(与
ls相同) - 搜索结果清晰易读
- 支持终端颜色主题
- 使用颜色区分不同类型的文件(与
-
智能大小写:
- 默认大小写不敏感
- 如果模式包含大写字母,自动切换为大小写敏感
- 符合用户直觉
-
智能过滤:
- 默认忽略隐藏目录和文件
- 默认忽略
.gitignore中的模式 - 减少噪音,聚焦相关结果
-
并行命令执行:
- 支持使用
-x选项对搜索结果执行命令 - 可以并行处理多个文件
- 提高批量操作效率
- 支持使用
-
命令名称简短:
fd比find短 50%- 输入更快,减少打字错误
开发语言与设计优势
Rust 语言的优势:
- 内存安全:编译时保证内存安全,避免常见的内存错误
- 高性能:零成本抽象,性能接近 C/C++
- 并发安全:内置并发安全保证,多线程搜索更安全
- 跨平台:单一代码库支持多个平台
- 现代工具链:Cargo 包管理器,依赖管理简单
设计优势:
- 零运行时依赖:单一可执行文件,部署简单
- 快速启动:启动速度快,适合频繁使用
- 资源占用低:内存和 CPU 占用小
- 易于集成:可以轻松集成到脚本和工具链中
核心用途与场景
基本用法
1. 简单搜索
# 搜索包含 "netflix" 的文件
fd netflix
# 输出示例:
# Software/python/imdb-ratings/netflix-details.py
2. 正则表达式搜索
# 搜索以 "x" 开头,以 "rc" 结尾的文件
fd '^x.*rc$'
# 搜索所有 .rs 文件
fd '\.rs$'
# 搜索包含数字的文件名
fd '[0-9]+'
3. 指定搜索目录
# 在 /etc 目录中搜索 "passwd"
fd passwd /etc
# 输出示例:
# /etc/default/passwd
# /etc/pam.d/passwd
# /etc/passwd
4. 列出所有文件
# 递归列出当前目录所有文件
fd
# 列出指定目录所有文件
fd . /path/to/directory
5. 文件类型过滤
# 只搜索文件(不包括目录)
fd -t f pattern
# 只搜索目录
fd -t d pattern
# 搜索符号链接
fd -t l pattern
6. 大小写敏感搜索
# 大小写敏感搜索(默认大小写不敏感)
fd -s Pattern
# 大小写不敏感搜索(默认)
fd pattern
7. 包含隐藏文件
# 搜索时包含隐藏文件和目录
fd -H pattern
# 搜索时包含 .gitignore 中的文件
fd -I pattern
8. 限制搜索深度
# 最多搜索 3 层目录
fd -d 3 pattern
# 精确搜索深度为 2
fd --max-depth 2 pattern
实际应用场景
场景 1:快速查找配置文件
# 查找所有配置文件
fd config
# 查找特定类型的配置文件
fd '\.conf$'
fd '\.json$'
fd '\.yaml$'
场景 2:代码搜索
# 查找所有 Rust 源文件
fd '\.rs$'
# 查找所有测试文件
fd test
# 查找包含特定函数的文件
fd -x grep -l "function_name"
场景 3:批量文件操作
# 删除所有临时文件
fd -t f '\.tmp$' -x rm
# 批量重命名文件
fd '\.txt$' -x mv {} {}.bak
# 批量转换文件编码
fd '\.txt$' -x iconv -f GBK -t UTF-8 {} -o {}.utf8
场景 4:项目清理
# 查找所有编译产物
fd target
# 查找所有日志文件
fd '\.log$'
# 查找所有备份文件
fd '\.bak$'
场景 5:文档管理
# 查找所有 Markdown 文档
fd '\.md$'
# 查找所有 PDF 文件
fd '\.pdf$'
# 查找最近修改的文件(结合 find)
fd -t f | xargs ls -lt | head -10
高级用法
1. 并行命令执行
# 对所有找到的文件执行命令
fd '\.rs$' -x cargo fmt
# 并行执行(默认)
fd '\.txt$' -x wc -l
# 串行执行
fd '\.txt$' -X wc -l
2. 排除特定模式
# 排除 node_modules 目录
fd pattern --exclude node_modules
# 排除多个目录
fd pattern --exclude node_modules --exclude target
3. 完整路径匹配
# 完整路径匹配(而非文件名)
fd '/usr/bin'
# 文件名匹配(默认)
fd bin
4. 结合其他工具
# 结合 grep 搜索文件内容
fd '\.rs$' -x grep -n "TODO"
# 结合 fzf 进行交互式选择
fd | fzf
# 结合 ripgrep 进行内容搜索
fd '\.rs$' | xargs rg "pattern"
常见报错与解决方案
问题 1:安装失败
错误信息:
error: failed to compile `fd-find`
原因:Rust 工具链未安装或版本不兼容。
解决方案:
# 安装 Rust 工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 或使用包管理器
# macOS
brew install rust
# Ubuntu/Debian
sudo apt install rustc cargo
# 验证安装
rustc --version
cargo --version
问题 2:权限错误
错误信息:
install: /usr/local/bin/fd: Permission denied
原因:尝试安装到系统目录,需要 root 权限。
解决方案:
# 使用 sudo 安装(不推荐用于交叉编译)
sudo make install
# 或使用 DESTDIR 安装到指定目录
make install DESTDIR=/path/to/install prefix=/usr
# 或安装到用户目录
cargo install --path . --root ~/.local
问题 3:找不到命令
错误信息:
fd: command not found
原因:fd 未安装或不在 PATH 中。
解决方案:
# 检查是否安装
which fd
# 检查 PATH
echo $PATH
# 添加到 PATH(如果安装到用户目录)
export PATH="$HOME/.local/bin:$PATH"
# 或创建符号链接
sudo ln -s /path/to/fd /usr/local/bin/fd
问题 4:构建失败
错误信息:
error: failed to run custom build command for `xxx`
原因:缺少系统依赖或编译工具。
解决方案:
# 安装编译工具
# macOS
xcode-select --install
# Ubuntu/Debian
sudo apt install build-essential
# 检查 Rust 工具链
rustup show
# 更新 Rust 工具链
rustup update
问题 5:搜索速度慢
错误信息:搜索大型目录时速度很慢。
原因:搜索了不必要的目录或文件。
解决方案:
# 排除大型目录
fd pattern --exclude node_modules --exclude target
# 限制搜索深度
fd pattern -d 3
# 只搜索文件(不包括目录)
fd -t f pattern
# 使用更精确的模式
fd '^pattern$' # 精确匹配
问题 6:颜色显示异常
错误信息:终端中颜色显示不正确。
原因:终端不支持颜色或颜色配置错误。
解决方案:
# 禁用颜色
fd --no-color pattern
# 强制启用颜色
fd --color always pattern
# 检查终端颜色支持
echo $TERM
# 设置终端类型
export TERM=xterm-256color
适配开源鸿蒙 PC 端的要点
系统环境差异
1. 包管理器
HarmonyOS PC 使用 HNP(HarmonyOS Native Package)作为包管理格式,而不是传统的 apt、yum 或 brew。
影响:
- 需要创建 HNP 包配置文件(
hnp.json) - 安装路径遵循 HNP 规范
- 包管理命令不同
2. 依赖库
fd 使用 Rust 编写,主要依赖:
- 标准库:Rust 标准库,跨平台兼容
- 系统调用:通过
libc和nixcrate 访问系统功能 - 文件系统:通过
ignorecrate 处理文件系统操作 - 正则表达式:通过
regexcrate 处理模式匹配
HarmonyOS 兼容性:
- Rust 标准库应该兼容
libccrate 需要适配 HarmonyOS 的系统调用nixcrate 需要适配 HarmonyOS 的 POSIX API- 文件系统操作应该兼容
3. 交叉编译
HarmonyOS 使用 ARM64 架构,需要交叉编译:
- 目标平台:
aarch64-unknown-linux-musl - 工具链:HarmonyOS SDK 的 LLVM 工具链
- 链接器:LLD(LLVM 链接器)
Rust 交叉编译适配
1. 目标平台配置
fd 使用 Rust 的交叉编译支持:
# 设置目标平台
export TARGET=aarch64-unknown-linux-musl
# 安装目标平台的 Rust 标准库
rustup target add ${TARGET}
2. 工具链配置
需要配置 Rust 使用 HarmonyOS SDK 的工具链:
# 设置编译器
export CC_aarch64_unknown_linux_musl=${OHOS_SDK}/native/llvm/bin/clang
export CXX_aarch64_unknown_linux_musl=${OHOS_SDK}/native/llvm/bin/clang++
# 设置链接器
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=${CC_aarch64_unknown_linux_musl}
3. Makefile 构建系统适配
fd 使用 Makefile 作为构建系统:
关键变量:
PROFILE: 构建配置(release/debug)EXE: 可执行文件路径prefix: 安装前缀(默认/usr/local)DESTDIR: 安装根目录(用于打包)
适配要点:
- 使用
DESTDIR和prefix控制安装路径 - 确保安装到 HNP 目录结构
- 创建必要的目录结构
关键适配要点总结
- Rust 工具链配置:设置正确的目标平台和编译器
- 安装路径控制:使用
DESTDIR和prefix控制安装路径 - 目录结构:遵循 HNP 规范的目录结构
- 包格式:使用 HNP 格式打包
- 依赖管理:确保所有 Rust 依赖兼容目标平台
鸿蒙适配中的报错解决过程
报错 1:构建系统识别错误
错误信息:
make: *** No rule to make target `clean'. Stop.
原因分析:
fd 的 Makefile 中没有定义 clean 目标,但构建脚本尝试运行 make clean。
排查思路:
-
检查 Makefile:
grep -E "^clean|^\.PHONY" Makefile # 发现没有 clean 目标 -
检查构建脚本:
grep "make clean" build_ohos.sh # 发现构建脚本调用了 make clean
解决方案:
修改构建脚本,忽略 make clean 的错误:
# 清理之前的构建(忽略错误,因为 Makefile 可能没有 clean 目标)
make clean 2>/dev/null || true
报错 2:安装路径权限错误
错误信息:
install: /usr/local/bin/fd: Permission denied
make: *** [install] Error 71
原因分析:make install 尝试安装到系统目录 /usr/local/bin,需要 root 权限。在交叉编译时,不应该安装到系统目录。
排查思路:
-
检查 Makefile 的 install 目标:
grep -A 5 "^install:" Makefile # 发现使用了 DESTDIR 和 prefix -
检查环境变量:
echo $DESTDIR echo $prefix # 发现未设置或设置不正确 -
查看 Makefile 变量定义:
prefix=/usr/local bindir=$(prefix)/bin
解决方案:
设置 DESTDIR 和 prefix 环境变量:
# 设置安装路径变量
export DESTDIR=${TREE_INSTALL_HNP_PATH}
# 在 make install 时传递 prefix=/usr 来覆盖 Makefile 中的默认值 /usr/local
make install prefix=/usr
工作原理:
DESTDIR是安装的根目录prefix是相对于DESTDIR的路径- 最终安装路径 =
${DESTDIR}${prefix}=${TREE_INSTALL_HNP_PATH}/usr - Makefile 会创建
${DESTDIR}${prefix}/bin、${DESTDIR}${prefix}/share/...等目录
报错 3:安装目录不存在
错误信息:
install: /Users/jianguo/HarmonyOSPC/build/data/service/hnp//fd.org/fd_8.7.0/usr/local/bin/fd: No such file or directory
原因分析:
虽然设置了 DESTDIR,但 Makefile 中的 prefix 默认值是 /usr/local,环境变量 prefix=/usr 没有覆盖 Makefile 中的变量。
排查思路:
-
检查实际安装路径:
# Makefile 中使用的是 $(prefix),默认值是 /usr/local # 所以实际路径是 ${DESTDIR}/usr/local/bin/fd -
检查 Makefile 变量优先级:
- Makefile 中定义的变量优先级高于环境变量
- 需要在
make install时传递prefix=/usr来覆盖
解决方案:
在 make install 命令中传递 prefix 参数:
# 设置安装路径变量
export DESTDIR=${TREE_INSTALL_HNP_PATH}
# 在 make install 时传递 prefix=/usr 来覆盖 Makefile 中的默认值 /usr/local
make install prefix=/usr
报错 4:目录结构不完整
错误信息:
cp: directory /Users/jianguo/HarmonyOSPC/build/data/service/hnp//fd.org/fd_8.7.0 does not exist
Error: Failed to copy hnp.json
原因分析:
安装目录不存在,make install 可能失败或目录未创建。
解决方案:
提前创建所有必要的安装目录:
# 创建安装目录
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/bin
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/bash-completion/completions
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/fish/vendor_completions.d
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/zsh/site-functions
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/man/man1
适配过程中的关键决策
- 使用 DESTDIR 和 prefix:解决安装路径问题
- 提前创建目录:确保安装目录存在
- 传递 prefix 参数:覆盖 Makefile 中的默认值
- 错误处理完善:添加详细的错误检查和提示
构建脚本详解
build_ohos.sh 完整代码
export TREE_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/fd.org/fd_8.7.0
sys_prefix=${PREFIX}
export PREFIX=${TREE_INSTALL_HNP_PATH}
echo "${PREFIX}"
# 创建安装目录
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/bin
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/bash-completion/completions
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/fish/vendor_completions.d
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/zsh/site-functions
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/man/man1
# 清理之前的构建(忽略错误,因为 Makefile 可能没有 clean 目标)
make clean 2>/dev/null || true
# 构建
echo "Building fd..."
make VERBOSE=1 || {
echo "Error: Build failed"
exit 1
}
# 安装
echo "Installing fd..."
# 设置安装路径变量
export DESTDIR=${TREE_INSTALL_HNP_PATH}
# 在 make install 时传递 prefix=/usr 来覆盖 Makefile 中的默认值 /usr/local
# 使用 DESTDIR 安装,这样会安装到 ${DESTDIR}/usr = ${TREE_INSTALL_HNP_PATH}/usr
make install prefix=/usr || {
echo "Error: Install failed"
exit 1
}
# 复制 hnp.json
cp hnp.json ${TREE_INSTALL_HNP_PATH}/ || {
echo "Error: Failed to copy hnp.json"
exit 1
}
# 打包
echo "Packaging..."
pushd ${TREE_INSTALL_HNP_PATH}/../
${HNP_TOOL} pack -i ${TREE_INSTALL_HNP_PATH} -o ${ARCHIVE_PATH}/ || {
echo "Error: HNP pack failed"
popd
exit 1
}
tar -zvcf ${ARCHIVE_PATH}/ohos_fd_8.7.0.tar.gz fd_8.7.0/ || {
echo "Error: Tar packaging failed"
popd
exit 1
}
popd
# 打印构建结果
echo ""
echo "=========================================="
echo "Build completed successfully!"
echo "=========================================="
echo "HNP Package: ${ARCHIVE_PATH}/fd.org_fd_8.7.0.hnp"
echo "Tar Archive: ${ARCHIVE_PATH}/ohos_fd_8.7.0.tar.gz"
echo "Installation Path: ${TREE_INSTALL_HNP_PATH}"
echo "=========================================="
echo ""
export PREFIX=${sys_prefix}
脚本关键点解析
1. 安装目录创建
作用:确保安装目录存在,避免安装失败。
实现:
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/bin
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/bash-completion/completions
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/fish/vendor_completions.d
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/zsh/site-functions
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/man/man1
2. 构建过程
作用:使用 Makefile 构建 fd。
实现:
make VERBOSE=1
说明:
VERBOSE=1显示详细的构建信息- Makefile 会调用
cargo build --profile release --locked - 构建产物在
target/release/fd
3. 安装路径控制
作用:使用 DESTDIR 和 prefix 控制安装路径。
实现:
export DESTDIR=${TREE_INSTALL_HNP_PATH}
make install prefix=/usr
路径映射:
bindir = $(prefix)/bin→${DESTDIR}/usr/bindatadir = $(prefix)/share→${DESTDIR}/usr/share- 最终安装路径:
${TREE_INSTALL_HNP_PATH}/usr/bin/fd
4. 打包过程
作用:创建 HNP 包和 tar 归档。
实现:
${HNP_TOOL} pack -i ${TREE_INSTALL_HNP_PATH} -o ${ARCHIVE_PATH}/
tar -zvcf ${ARCHIVE_PATH}/ohos_fd_8.7.0.tar.gz fd_8.7.0/
HNP 包配置
hnp.json
{
"type": "hnp-config",
"name": "fd",
"version": "8.7.0",
"install": {}
}
安装目录结构
fd_8.7.0/
├── usr/
│ ├── bin/
│ │ └── fd # 主程序
│ └── share/
│ ├── bash-completion/
│ │ └── completions/
│ │ └── fd # Bash 自动补全
│ ├── fish/
│ │ └── vendor_completions.d/
│ │ └── fd.fish # Fish shell 自动补全
│ ├── zsh/
│ │ └── site-functions/
│ │ └── _fd # Zsh 自动补全
│ └── man/
│ └── man1/
│ └── fd.1 # 手册页
└── hnp.json # HNP 包配置
构建结果
构建成功后,会生成以下文件:
-
HNP 包:
fd.org_fd_8.7.0.hnp- HarmonyOS 原生包格式
- 可以直接安装到 HarmonyOS 设备
-
Tar 归档:
ohos_fd_8.7.0.tar.gz- 压缩的 tar 归档
- 包含完整的安装目录结构
构建输出示例
==========================================
Build completed successfully!
==========================================
HNP Package: /path/to/archive/fd.org_fd_8.7.0.hnp
Tar Archive: /path/to/archive/ohos_fd_8.7.0.tar.gz
Installation Path: /path/to/data/service/hnp/fd.org/fd_8.7.0
==========================================
仓库地址与安装方式
仓库地址
HarmonyOS 适配版本:
- 仓库:https://gitcode.com/nutpi/fd
- Tag:
8.7.0_ohos - 原始项目:https://github.com/sharkdp/fd
安装方式
Linux(通用)
使用包管理器:
# Ubuntu/Debian
sudo apt install fd-find
# Fedora
sudo dnf install fd-find
# Arch Linux
sudo pacman -S fd
# Alpine Linux
apk add fd
使用 Cargo 安装:
# 从 crates.io 安装
cargo install fd-find
# 从源码安装
git clone https://github.com/sharkdp/fd.git
cd fd
cargo install --path .
使用预编译二进制:
# 下载预编译二进制
wget https://github.com/sharkdp/fd/releases/download/v8.7.0/fd-v8.7.0-x86_64-unknown-linux-gnu.tar.gz
tar -xzf fd-v8.7.0-x86_64-unknown-linux-gnu.tar.gz
sudo cp fd-v8.7.0-x86_64-unknown-linux-gnu/fd /usr/local/bin/
macOS
使用 Homebrew:
brew install fd
使用 MacPorts:
sudo port install fd
使用 Cargo:
cargo install fd-find
Windows
使用 Chocolatey:
choco install fd
使用 Scoop:
scoop install fd
使用 Cargo:
cargo install fd-find
开源鸿蒙 PC
使用 HNP 包:
# 安装 HNP 包
hnp install fd.org_fd_8.7.0.hnp
# 或使用 tar 归档
tar -xzf ohos_fd_8.7.0.tar.gz
# 手动复制到系统路径
从源码交叉编译:
# 1. 克隆仓库
git clone https://gitcode.com/nutpi/fd.git
cd fd
git checkout 8.7.0_ohos
# 2. 设置 HarmonyOS SDK 路径
export OHOS_SDK=/path/to/ohosdk
# 3. 运行构建脚本
./build_ohos.sh
# 4. 安装生成的 HNP 包
hnp install fd.org_fd_8.7.0.hnp
验证安装
# 检查版本
fd --version
# 测试基本功能
fd test
# 查看帮助
fd --help
总结
适配要点
- 构建系统:使用 Makefile,需要正确配置安装路径
- 安装路径:使用
DESTDIR和prefix控制 - 目录创建:提前创建安装目录
- 参数传递:在
make install时传递prefix参数覆盖默认值 - 包格式:遵循 HNP 规范
关键决策
- DESTDIR 和 prefix:解决安装路径问题
- 提前创建目录:避免安装失败
- 传递 prefix 参数:覆盖 Makefile 中的默认值
优势
- 高性能:Rust 编写,并行搜索,速度极快
- 用户友好:直观语法,智能默认设置
- 功能强大:正则表达式、并行执行、颜色高亮
- 易于集成:可以轻松集成到脚本和工具链中
适用场景
- 快速文件搜索
- 代码库导航
- 批量文件操作
- 项目清理
- 文档管理
FAQ
Q1: fd 和 find 有什么区别?
A: 主要区别:
- 语法:fd 使用更直观的语法,
fd patternvsfind -iname '*pattern*' - 速度:fd 使用并行搜索,通常比 find 快数倍
- 默认行为:fd 默认忽略隐藏文件和
.gitignore,减少噪音 - 功能:find 功能更全面,fd 专注于常见用例
Q2: 如何搜索隐藏文件?
A:
# 使用 -H 选项
fd -H pattern
# 或使用 -a 选项(包含所有文件)
fd -a pattern
Q3: 如何搜索特定类型的文件?
A:
# 只搜索文件
fd -t f pattern
# 只搜索目录
fd -t d pattern
# 搜索符号链接
fd -t l pattern
# 使用文件扩展名
fd '\.rs$'
Q4: 如何在 HarmonyOS 上使用 fd?
A:
- 安装 HNP 包:
hnp install fd.org_fd_8.7.0.hnp - 或从源码交叉编译
- 使用方式与 Linux 相同
Q5: 为什么需要设置 DESTDIR 和 prefix?
A:
DESTDIR用于指定安装根目录(用于打包)prefix用于指定相对于 DESTDIR 的路径- 这样可以安装到构建目录而不是系统目录
Q6: 如何提高搜索速度?
A:
# 排除大型目录
fd pattern --exclude node_modules --exclude target
# 限制搜索深度
fd pattern -d 3
# 只搜索文件(不包括目录)
fd -t f pattern
# 使用更精确的模式
fd '^pattern$' # 精确匹配
Q7: 可以并行执行命令吗?
A: 可以:
# 并行执行(默认)
fd '\.rs$' -x cargo fmt
# 串行执行
fd '\.rs$' -X cargo fmt
Q8: 如何输出到文件?
A:
# 重定向输出
fd pattern > results.txt
# 或使用 -x 执行命令
fd '\.txt$' -x cat {} > all.txt
相关链接
更多推荐



所有评论(0)