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
          打印版本信息