名称: fd-find
描述: 一个快速且用户友好的 find 替代品——语法简单、默认设置智能、尊重 .gitignore。
主页: https://github.com/sharkdp/fd
元数据: {"clawdbot":{"emoji":"📂","requires":{"bins":["fd"]},"install":[{"id":"brew","kind":"brew","formula":"fd","bins":["fd"],"label":"使用 Homebrew 安装 fd"},{"id":"apt","kind":"apt","package":"fd-find","bins":["fd"],"label":"使用 APT 安装 fd"}]}}
find 命令的用户友好替代品,具有智能的默认设置。
# 按名称查找文件
fd 模式
# 在指定目录中查找
fd 模式 /目录/路径
# 不区分大小写
fd -i 模式
# 查找所有 Python 文件
fd -e py
# 查找多种扩展名
fd -e py -e js -e ts
# 仅查找目录
fd -t d 模式
# 仅查找文件
fd -t f 模式
# 查找符号链接
fd -t l
# 排除模式
fd 模式 -E "node_modules" -E "*.min.js"
# 包含隐藏文件
fd -H 模式
# 包含被忽略的文件(.gitignore)
fd -I 模式
# 搜索所有文件(隐藏+被忽略)
fd -H -I 模式
# 最大搜索深度
fd 模式 -d 3
# 对结果执行命令
fd -e jpg -x convert {} {.}.png
# 并行执行
fd -e md -x wc -l
# 与 xargs 配合使用
fd -e log -0 | xargs -0 rm
# 完整正则表达式搜索
fd '^test.*\.js$'
# 匹配完整路径
fd --full-path 'src/.*/test'
# 通配符模式
fd -g "*.{js,ts}"
# 过去一天内修改过的文件
fd --changed-within 1d
# 在指定日期前修改过的文件
fd --changed-before 2024-01-01
# 最近创建的文件
fd --changed-within 1h
# 大于 10MB 的文件
fd --size +10m
# 小于 1KB 的文件
fd --size -1k
# 特定大小范围的文件
fd --size +100k --size -10m
# 输出绝对路径
fd --absolute-path
# 列表格式(类似 ls -l)
fd --list-details
# 空字符分隔符(用于 xargs)
fd -0 模式
# 颜色控制:always/never/auto
fd --color always 模式
查找并删除旧文件:
fd --changed-before 30d -t f -x rm {}
查找大文件:
fd --size +100m --list-details
复制所有 PDF 文件到目录:
fd -e pdf -x cp {} /目标/目录/
统计所有 Python 文件的行数:
fd -e py -x wc -l | awk '{sum+=$1} END {print sum}'
查找损坏的符号链接:
fd -t l -x test -e {} \; -print
在特定时间窗口内搜索:
fd --changed-within 2d --changed-before 1d
与 ripgrep 配合:
fd -e js | xargs rg "模式"
与 fzf(模糊查找器)配合:
vim $(fd -t f | fzf)
与 bat(cat 替代品)配合:
fd -e md | xargs bat
fd 通常比 find 快得多.gitignore 规则(使用 -I 禁用)-t 进行类型过滤(f=文件,d=目录,l=符号链接,x=可执行文件)-e 指定扩展名比 -g "*.ext" 更简单-x 命令中的 {} 代表找到的路径{.} 会去除文件扩展名{/} 获取文件名,{//} 获取目录名GitHub: https://github.com/sharkdp/fd
手册页: man fd