FD - 查找条目的程序
fd 是一个在你文件系统中查找条目的程序。它是一个简单、快速、友好的 find 替代品。虽然它的目标不是支持 find 的所有强大功能,但它为大多数的使用情况提供了合理的(有意见的)默认值。
项目地址: https://github.com/cha0ran/fd-zh
安装FD
apt update && apt install fd-find语法:
fa 例1:在磁盘中搜索文件名包含 .md
fd .md /例2:用正则表达式 - 在磁盘中搜索后缀名为 .md
fd '.*\.md$' /例3:在 /site/content/ 目录搜索文件名包含 zh-tw.md
fd zh-tw.md /site/content/例4:用正则表达式 - 在 /site/content/ 目录搜索末尾名为 zh-tw 后缀名 .md
fd '.*zh-tw\.md$' /site/content/例5:对FD搜索结果执行外部命令, 用正则表达式 - 在 /site/content/ 目录搜索末尾名为 zh-tw 后缀名 .md ,并将搜索出的结果内容移除,使用命令 rm -R
fd '.*zh-tw\.md$' /site/content/ -X rm -R中文帮助
A program to find entries in your filesystem
使用: fd [OPTIONS] [pattern] [path]...
Arguments:
[pattern]
搜索模式,可以是正则表达式(默认)或通配符模式(if --glob is used)。如果没有指定模式,则认为每个条目都是匹配项。如果您的模式以破折号(-)开头,请确保先传递 '--',否则它将被视为标志(fd -- '-foo')。
[path]...
文件系统搜索的根目录(可选)。如果省略,则搜索当前工作目录。
Options:
-H, --hidden
包括隐藏的目录和文件在搜索结果中(默认:跳过隐藏的文件和目录)。如果文件或目录的名称以 `.` 符号(点)开头,则视为隐藏。可以使用 --no-hidden 覆盖该标志。
-I, --no-ignore
显示文件和目录的搜索结果,否则这些结果将被 '.gitignore'、'.ignore'、'.fdignore' 或全局忽略文件忽略。可以使用 --ignore 覆盖该标志。
--no-ignore-vcs
显示文件和目录的搜索结果,否则这些结果将被 '.gitignore' 文件忽略。可以使用 --ignore-vcs 覆盖该标志。
--no-ignore-parent
显示文件和目录的搜索结果,否则这些结果将被父目录中的 '.gitignore'、'.ignore' 或 '.fdignore' 文件忽略。
-u, --unrestricted...
执行无限制的搜索,包括被忽略和隐藏的文件。这是 '--no-ignore --hidden' 的别名。
-s, --case-sensitive
执行区分大小写的搜索。默认情况下,fd 使用不区分大小写的搜索,除非模式中包含大写字母字符(智能大小写)。
-i, --ignore-case
执行不区分大小写的搜索。默认情况下,fd 使用不区分大小写的搜索,除非模式中包含大写字母字符(智能大小写)。
-g, --glob
执行基于通配符的搜索,而不是正则表达式搜索。
--regex
执行基于正则表达式的搜索(默认)。可以用来覆盖 --glob。
-F, --fixed-strings
将模式视为字面字符串,而不是正则表达式。注意,这也执行子字符串比较。如果您想要精确匹配文件名,请考虑使用 '--glob'。
--and <pattern>
添加额外的必需搜索模式,所有这些模式都必须匹配。可以指定多个额外的模式。这些模式是正则表达式,除非使用了 '--glob' 或 '--fixed-strings'。
-a, --absolute-path
显示从根目录开始的完整路径,而不是相对路径。可以使用 --relative-path 覆盖该标志。
-l, --list-details
使用类似 'ls -l' 的详细列表格式。基本上,这是 '--exec-batch ls -l' 的别名,附加了一些额外的 'ls' 选项。可以用于查看更多元数据,显示符号链接的目标以及实现确定性排序。
-L, --follow
默认情况下,fd 不会进入符号链接的目录。使用此标志,也会遍历符号链接。可以使用 --no-follow 覆盖该标志。
-p, --full-path
默认情况下,搜索模式仅与文件名(或目录名)匹配。使用此标志,模式将与完整(绝对)路径匹配。示例:
fd --glob -p '**/.git/config'
-0, --print0
使用空字符(而不是换行符)分隔搜索结果。用于将结果传输到 'xargs'。
-d, --max-depth <depth>
限制目录遍历到给定的深度。默认情况下,搜索深度没有限制。
--min-depth <depth>
仅显示从给定深度开始的搜索结果。另请参阅:'--max-depth' 和 '--exact-depth'
--exact-depth <depth>
仅在精确给定的深度处显示搜索结果。这是 '--min-depth <depth> --max-depth <depth>' 的别名。
-E, --exclude <pattern>
排除与给定的通配符模式匹配的文件/目录。这将覆盖任何其他的忽略逻辑。可以指定多个排除模式。
示例:
--exclude '*.pyc'
--exclude node_modules
--prune
不要遍历与搜索条件匹配的目录。如果要排除特定目录,请使用 '--exclude=...' 选项。
-t, --type <filetype>
根据类型筛选搜索结果:
'f' 或 'file': 普通文件
'd' 或 'directory': 目录
'l' 或 'symlink': 符号链接
's' 或 'socket': 套接字
'p' 或 'pipe': 命名管道(FIFO)
'x' 或 'executable': 可执行文件
'e' 或 'empty': 空文件或目录
此选项可以多次指定以包括多种文件类型。搜索 '--type file --type symlink' 将显示普通文件和符号链接。请注意,'executable' 和 'empty' 过滤器的工作方式不同:'--type executable' 默认隐含 '--type file'。'--type empty' 搜索空文件和目录,除非还额外指定了 '--type file' 或 '--type directory'。
示例:
- 仅搜索文件:
fd --type file …
fd -tf …
- 查找文件和符号链接:
fd --type file --type symlink …
fd -tf -tl
…
- 查找可执行文件:
fd --type executable
fd -tx
- 查找空文件:
fd --type empty --type file
fd -te -tf
- 查找空目录:
fd --type empty --type directory
fd -te -td
-e, --extension <ext>
(另外)通过文件扩展名筛选搜索结果。可以指定多个允许的文件扩展名。
如果想要搜索没有扩展名的文件,可以使用正则表达式 '^[^.]+$' 作为普通搜索模式。
-S, --size <size>
根据文件大小限制结果,使用格式 <+-><NUM><UNIT>。
'+': 文件大小必须大于或等于此值
'-': 文件大小必须小于或等于此值
如果未指定 '+' 或 '-',文件大小必须正好等于此值。
'NUM': 数字大小(例如 500)
'UNIT': NUM 的单位。不区分大小写。
允许的单位值:
'b': 字节
'k': 千字节(十进制,10^3 = 1000 字节)
'm': 兆字节
'g': 吉字节
't': 太字节
'ki': 吉比字节(二进制,2^10 = 1024 字节)
'mi': 兆比字节
'gi': 吉比字节
'ti': 太比字节
--changed-within <date|dur>
基于文件修改时间过滤结果。返回修改时间大于参数的文件。参数可以作为特定时间点(YYYY-MM-DD HH:MM:SS)或持续时间(10h,1d,35min)提供。如果未指定时间,则默认为 00:00:00。还可以使用 '--change-newer-than'、'--newer' 或 '--changed-after' 作为别名。
示例:
--changed-within 2weeks
--change-newer-than '2018-10-27 10:00:00'
--newer 2018-10-27
--changed-after 1day
--changed-before <date|dur>
基于文件修改时间过滤结果。返回修改时间小于参数的文件。参数可以作为特定时间点(YYYY-MM-DD HH:MM:SS)或持续时间(10h,1d,35min)提供。也可以使用 '--change-older-than' 或 '--older' 作为别名。
示例:
--changed-before '2018-10-27 10:00:00'
--change-older-than 2weeks
--older 2018-10-27
-o, --owner <user:group>
根据用户和/或组筛选文件。格式:[(user|uid)][:(group|gid)]。两侧均可省略。在任一侧前面加上 '!' 可以排除文件。
示例:
--owner john
--owner :students
--owner '!john:students'
-x, --exec <cmd>...
对每个搜索结果并行执行一个命令(使用 --threads=1 进行顺序命令执行)。--exec 后的所有位置参数都被视为命令的参数 - 而不是 fd 的参数。因此,建议将 '-x'/'--exec' 选项放在最后。
在执行命令之前将使用以下占位符进行替换:
'{}': 路径(当前搜索结果的路径)
'{/}': 基本名称
'{//}': 父目录
'{.}': 没有文件扩展名的路径
'{/.}': 没有文件扩展名的基本名称
如果没有出现占位符,假定在末尾隐含一个隐含的 "{}"。
示例:
- 查找所有 *.zip 文件并解压缩它们:
fd -e zip -x unzip
- 查找 *.h 和 *.cpp 文件并为每个运行 "clang-format -i ..":
fd -e h -e cpp -x clang-format -i
- 将所有 *.jpg 文件转换为 *.png 文件:
fd -e jpg -x convert {} {.}.png
-X, --exec-batch <cmd>...
一次执行给定的命令,所有搜索结果作为参数。在执行命令之前将使用以下占位符之一进行替换:
'{}': 路径(所有搜索结果的路径)
'{/}': 基本名称
'{//}': 父目录
'{.}': 没有文件扩展名的路径
'{/.}': 没有文件扩展名的基本名称
如果没有出现占位符,假定在末尾隐含一个隐含的 "{}"。
示例:
- 查找所有 test_*.py 文件并在您喜欢的编辑器中打开它们:
fd -g 'test_*.py' -X vim
- 查找所有 *.rs 文件并使用 "wc -l ..." 计算行数:
fd -e rs -X wc -l
--batch-size <size>
传递给 -X 选项的命令的参数的最大数量。如果结果数大于给定大小,将使用剩余的参数再次运行 -X 给定的命令。批处理大小为零表示没有限制(默认值),但请注意,由于操作系统对命令行长度的最大限制,仍可能进行分批处理。
--ignore-file <path>
添加自定义的 '.gitignore' 格式的忽略文件。这些文件具有低优先级。
-c, --color <when>
声明何时在模式匹配输出中使用颜色
[默认值:auto]
可能的值:
- auto: 如果输出将传递到交互式控制台,则显示颜色(默认值)
- always: 总是使用带有
颜色的输出
- never: 不使用带有颜色的输出
-j, --threads <num>
设置用于搜索和执行的线程数(默认值:可用 CPU 核心数)
--max-results <count>
将搜索结果数限制为 'count' 并立即退出。
-1
将搜索限制为单个结果并立即退出。这是 '--max-results=1' 的别名。
-q, --quiet
当标志存在时,程序不会打印任何内容,如果至少有一个匹配项,将以退出码 0 返回。否则,退出码将为 1。可以使用 '--has-results' 作为别名。
--show-errors
启用显示文件系统错误,例如权限不足或死符号链接的情况。
--base-directory <path>
将 fd 的当前工作目录更改为提供的路径。这意味着搜索结果将根据给定的基本路径显示。请注意,通过位置 <path> 参数或 '--search-path' 选项传递给 fd 的相对路径也将相对于此目录解析。
--path-separator <separator>
设置在打印文件路径时使用的路径分隔符。默认为操作系统特定的分隔符(Unix 上为 '/',Windows 上为 '\')。
--search-path <search-path>
提供要搜索的路径,作为位置 <path> 参数的替代方案。更改用法为 `fd [OPTIONS] --search-path <path> --search-path <path2> [<pattern>]`
--strip-cwd-prefix
默认情况下,相对路径在使用 -x/--exec、-X/--exec-batch 或 -0/--print0 时前缀为 './',以减少以 '-' 开头的路径被视为命令行选项的风险。使用此标志禁用此行为。
--one-file-system
默认情况下,fd 将根据其他选项遍历文件系统树。使用此标志,fd 确保不会进入与其启动的文件系统不同的文件系统中。类似于 find(1) 的 -mount 或 -xdev 过滤器。
-h, --help
打印帮助信息(使用 `-h` 查看摘要)
-V, --version
打印版本信息