建议废弃命令 find,改用 Rust 的这个轮子
2021-09-22 19:12:00 Author: mp.weixin.qq.com(查看原文) 阅读量:43 收藏

之前介绍过,CLI 是 Rust 的一块重要市场。类 Unix 系统下有很多牛逼的命令,但都挺古老的,而且不一定特别好用。比如 find 这个命令,实话说,很多人用不明白,感觉用法跟其他命令不太一致。

比如查找当前目录及其子目录下,文件名包含「标准库」的文件:

$ find . -name 标准库

很多命令,要查找的目标目录放在最后,find 却不是。。。而且,查找速度很慢!

而这个 Rust 的轮子:https://github.com/sharkdp/fd,Star 数 18k+,是一个简单ㄡ快速且用户友好的 find 替代方案。而且,Windows 下也可以方便使用。

怎么个友好法?就比如上面的例子,fd 这么使用:

$ fd 标准库

查找速度很快,而且结果会根据不同类型文件不同颜色显示,真的很现代。

具体来说,fd 有如下特征:

  • 方便的语法: fd PATTERN而不是find -iname '*PATTERN*'.
  • 彩色终端输出 (类似于 ls)
  • 速度快速的
  • 很智能:默认情况下,搜索不区分大小写。
  • 默认情况下,忽略隐藏的目录和文件。
  • 默认忽略匹配你.gitignore文件中的模式。
  • 支持正则表达式。
  • Unicode 感知。
  • 命令输入量比 find 少 50%+。
  • 用类似于 GNU 穿行的语法,执行并行命令。

此外,还有其他附加功能,比如:

# 转换 所有 jpg 到  png :
fd -e jpg -x convert {} {.}.png

# Unpack all zip files (if no placeholder is given, the path is appended):
fd -e zip -x unzip

# Convert all flac files into opus files:
fd -e flac -x ffmpeg -i {} -c:a libopus {.}.opus

# Count the number of lines in Rust files (the command template can be terminated with ';'):
fd -x wc -l \; -e rs

fd 的帮助文档:

USAGE:
    fd [FLAGS/OPTIONS] [<pattern>] [<path>...]

FLAGS:
    -H, --hidden            搜索隐藏的文件和目录
    -I, --no-ignore         不要忽略 .(git | fd)ignore 文件匹配
        --no-ignore-vcs     不要忽略.gitignore文件的匹配
    -s, --case-sensitive    区分大小写的搜索(默认值:智能案例)
    -i, --ignore-case       不区分大小写的搜索(默认值:智能案例)
    -F, --fixed-strings     将模式视为文字字符串
    -a, --absolute-path     显示绝对路径而不是相对路径
    -L, --follow            遵循符号链接
    -p, --full-path         搜索完整路径(默认值:仅限 file-/dirname)
    -0, --print0            用null字符分隔结果
    -h, --help              打印帮助信息
    -V, --version           打印版本信息

OPTIONS:
    -d, --max-depth <depth>        设置最大搜索深度(默认值:无)
    -t, --type <filetype>...       按类型过滤:文件(f),目录(d),符号链接(l),
                                   可执行(x),空(e)
    -e, --extension <ext>...       按文件扩展名过滤
    -x, --exec <cmd>               为每个搜索结果执行命令
    -E, --exclude <pattern>...     排除与给定glob模式匹配的条目
        --ignore-file <path>...    以.gitignore格式添加自定义忽略文件
    -c, --color <when>             何时使用颜色:never,*auto*, always
    -j, --threads <num>            设置用于搜索和执行的线程数
    -S, --size <size>...           根据文件大小限制结果。

ARGS:
    <pattern>    the search pattern, a regular expression (optional)
    <path>...    the root directory for the filesystem search (optional)

如何安装呢?作为一名 Rustacean,自然通过 cargo 安装:

$ cargo install fd-find

当然,官方也提供了其他不同操作系统下的安装方式,在项目首页都有说明。

强烈建议大家可以试试这个工具,远离 find。


往期推荐

我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。

坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxNzY0NDE3NA==&mid=2247488215&idx=2&sn=76bd2d94626a9d571d602c04c919e06a&chksm=9be33d36ac94b4200ef620a3c14f74f335be41b40e57de41995231422f696aedcaf600c9ade2#rd
如有侵权请联系:admin#unsafe.sh