GitHub - chinanf-boy/fd-zh: 🇨🇳翻译: 一种简单,快速和用户友好的 >find< 替代方案 ❤️ 校对 ✅ (original) (raw)
fd
「 _fd_是一种简单ㄡ快速和用户友好的find替代方案.」
校对 ✅
翻译的原文 | 与日期 | 最新更新 | 更多 |
---|---|---|---|
commit | ⏰ 2018 8.20 | 中文翻译 |
贡献
欢迎 👏 勘误/校对/更新贡献 😊 具体贡献请看
生活
If help, buy me coffee —— 营养跟不上了,给我来瓶营养快线吧! 💰
目录
- fd
- 特征
- 演示
- 基准
- 彩色输出
- 并行命令执行
- 安装
* Ubuntu
* Fedora
* Arch Linux
* Gentoo Linux
* openSUSE Linux
* Void Linux
* macOS
* Windows
* NixOS / via Nix
* FreeBSD
* 源码文件
* 二进制文件 - 开发
- 命令行选项
- 教程
* 简单搜索
* 正则表达式搜索
* 指定根目录
* 仅运行_fd_
* 搜索特定的文件扩展名
* 隐藏和忽略的文件
* 排除特定文件或目录
* 使用fd 带xargs或parallel
* 与其他程序的集成
* 使用fd与fzf
* 使用fd与emacs
fd
_fd_是一种简单ㄡ快速和用户友好的fd替代方案.
虽然它不寻求复刻_find_所有强大的功能,但它提供了明智的 (自定的) 80%的用例.
特征
- 方便语法:
fd PATTERN
而不是find -iname '*PATTERN*'
. - 彩色终端输出 (类似于_ls_)
- 它是_快速的_ (见基准下面) .
- 聪明案例: 默认情况下,搜索不区分大小写. 如果模式包含大写字符*, 则切换为区分大小写字符. .
- 默认情况下,忽略隐藏的目录和文件.
- 忽略匹配你
.gitignore
文件中的模式,默认情况. - 正则表达式.
- Unicode感知.
- 命令输入量*50%*优于*
find
: -) - 用类似于GNU穿行的语法,执行并行命令.
演示
基准
让我们搜索我的主文件夹的以[0-9].jpg
为结束的文件. 它包含190个子目录和大约一百万个文件. 我使用hyperfine进行平均和统计分析. 下面的基准是用"warm"/预填充的磁盘缓存执行的 (对于"冷"磁盘缓存的结果显示出相同的趋势) .
让我们从find
:
Benchmark #1: find ~ -iregex '.*[0-9]\.jpg$'
Time (mean ± σ): 7.236 s ± 0.090 s
Range (min … max): 7.133 s … 7.385 s
find
如果不需要执行正则表达式搜索,则会更快得多:
Benchmark #2: find ~ -iname '*[0-9].jpg'
Time (mean ± σ): 3.914 s ± 0.027 s
Range (min … max): 3.876 s … 3.964 s
现在让我们尝试同样的fd
. 注意fd
_总是_执行正则表达式搜索. 选项--hidden
和--no-ignore
需要自行决策, 下面的fd
需要遍历隐藏文件夹和忽略的路径 (见下文) :
Benchmark #3: fd -HI '.*[0-9]\.jpg$' ~
Time (mean ± σ): 811.6 ms ± 26.9 ms
Range (min … max): 786.0 ms … 870.7 ms
对于这个特殊的例子,fd
大约比find -iregex
快九倍,和大约比find -iname
快五倍. 顺便说一下,两个工具都找到了完全相同的20880个文件: 😄 .
最后,让我们运行fd
没有--hidden
和--no-ignore
选项 (当然,这会导致不同的搜索结果) . 如果_fd_不必遍历隐藏的和Git忽略的文件夹,它的数量级快了一个数量级:
Benchmark #4: fd '[0-9]\.jpg$' ~
Time (mean ± σ): 123.7 ms ± 6.0 ms
Range (min … max): 118.8 ms … 140.0 ms
注释这是在_一个特定的_机器上的_一个特定的_基准. 虽然我已经做了很多不同的测试 (并且发现了一致的结果) ,但是事情可能对你来说不同. 我鼓励每个人自己尝试测试. 在这个仓库是所有用于对比的脚本.
关于_fd_的速度,主要的耗时在regex
和ignore
,还有ripgrep箱子 (检查一下!) .
彩色输出
fd
可以通过扩展来帮输出着色,就像ls
. 为了使这工作,环境变量LS_COLORS必须设置. 通常,此变量的值由dircolors
命令控制,它提供了一种方便的配置格式,来定义不同文件格式的颜色. 在大多数分配情况,LS_COLORS
应该已经设置好了. 如果您正在寻找替代的,且更完整的 (以及更丰富多彩的) 变体,请参见在这里或在这里.
并行命令执行
如果-x
/--exec
选项与命令模板一起指定,将创建一个作业池,用于并行执行命令,每个发现的路径则作为输入. 生成命令的语法类似于GNU穿行的语法:
{}
: 将被替换为搜索结果路径的占位符令牌 (documents/images/party.jpg
){.}
: 像{}
,但没有文件扩展名 (documents/images/party
){/}
:占位符,将被搜索结果的基名替换 (占位符) .party.jpg
){//}
:使用已发现路径的父节点 (documents/images
){/.}
:使用BaseNeNe,将扩展名移除 (party
)
转换 所有 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
安装
Ubuntu
以及其他基于Debian的Linux发行版.
下载最新.deb
包装从releases页面并通过以下方式安装:
sudo dpkg -i fd_7.0.0_amd64.deb # adapt version number and architecture
Fedora
从 FEDORA 28 开始,您可以从官方包装来源安装fd
:
对于旧版本,您可以使用Fedora copr安装fd
:
dnf copr enable keefle/fd dnf install fd
Arch Linux
你可以从官方回购安装fd 软件包:
Gentoo Linux
你可以从官方回购使用fd 软件包:
openSUSE Linux
你可以从官方回购安装fd 软件包:
Void Linux
你可以安装fd
通过xbps安装:
macOS
你可以安装fd
具有brew:
或与Mac port:
Windows
您可以从中 releases页面,下载预构建的二进制文件.
或者,您可以安装fd
通过Scoop:
或通过Chocolatey:
NixOS / via Nix
你可以使用NixOS 包管理安装fd
:
FreeBSD
你可以安装sysutils/fd
通过patmaster:
源码文件
你可以通过rust的包管理cargo安装_fd_:
注意rust版本要_1.20.0_或以上.
二进制文件
这个releases页面包括Linux,MaOS和Windows的预编译二进制文件.
开发
git clone https://github.com/sharkdp/fd
Build
cd fd cargo build
Run unit tests and integration tests
cargo test
Install
cargo install
命令行选项
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)
教程
首先,为了获得所有可用的命令行选项的概述,您可以运行fd -h
的简明帮助消息 (见上文) 或fd --help
更详细的版本.
简单搜索
fd_设计用于查找文件系统中的条目. 你可以执行的最基本的搜索就是运行一个参数:搜索模式的_fd. 例如,假设您想查找您的旧脚本 (包括netflix
) :
fd netfl Software/python/imdb-ratings/netflix-details.py
如果只调用一个这样的参数,_fd_递归检索当前目录中, _包含_模式netfl
的任何条目.
正则表达式搜索
搜索模式被视为正则表达式. 这里,我们搜索开始x
并以rc
结束的条目. :
cd /etc fd '^x.*rc$' X11/xinit/xinitrc X11/xinit/xserverrc
指定根目录
如果我们想搜索一个特定的目录,它可以作为第二个参数_fd_:
fd passwd /etc /etc/default/passwd /etc/pam.d/passwd /etc/passwd
仅运行_fd_
_fd_可以不带参数调用. 这是非常有用的,以便快速地查看当前目录中的所有条目,递归地 (类似于ls -R
) :
cd fd/tests fd testenv testenv/mod.rs tests.rs
搜索特定的文件扩展名
通常,我们对特定类型的所有文件感兴趣. 这可以用-e
(或) --extension
选择权. 在这里,我们搜索FD仓库中的所有md文件:
cd fd fd -e md CONTRIBUTING.md README.md
这个-e
选项可以与搜索模式结合使用:
fd -e rs mod src/fshelper/mod.rs src/lscolors/mod.rs tests/testenv/mod.rs
隐藏和忽略的文件
默认情况下,_fd_不搜索隐藏目录,不在搜索结果中显示隐藏文件. 若要禁用此行为,我们可以使用-H
(或) --hidden
选项:
fd pre-commit fd -H pre-commit .git/hooks/pre-commit.sample
如果我们在一个Git存储库 (或者包括Git存储库) 中工作,_fd_不搜索.gitignore
文件中匹配模式 (并且不显示文件) . 若要禁用此行为,我们可以使用-I
(或) --no-ignore
选项:
fd num_cpu fd -I num_cpu target/debug/deps/libnum_cpus-f5ce7ef99006aa05.rlib
真正搜索_全部的_文件和目录,简单地组合隐藏和忽略的特性来显示一切 (-HI
)
排除特定文件或目录
有时我们希望忽略来自特定子目录的搜索结果. 例如,我们可能要搜索所有隐藏的文件和目录 (-H
,但仍会排除所有.git
目录. 我们可以使用-E
(或) --exclude
选择此选项. 它以任意的模式作为一个参数:
我们也可以用这个来跳过安装的目录:
fd -E /mnt/external-drive …
或跳过某些文件类型:
为了让这些模式永久不变,你可以创建一个.fdignore
文件. 他们工作得很像.gitignore
文件. 例如:
cat ~/.fdignore /mnt/external-drive *.bak
使用fd 带xargs
或parallel
如果我们想在所有搜索结果上运行命令,我们可以将输出管xargs
:
fd -0 -e rs | xargs -0 wc -l
这里,-0
选项告诉_fd_用空字符 (而不是换行符) 分隔搜索结果. 以同样的方式,xargs
的-0
选项同样告诉它以这种方式读取输入.
与其他程序的集成
使用fd与fzf
你可以使用_fd_生成fzf命令行模糊查找器的输入:
export FZF_DEFAULT_COMMAND='fd --type file' export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
然后,您可以键入vim <Ctrl-T>
在你的终端打开FZF,也即是fd的搜索结果.
或者,您可能喜欢遵循符号链接并包含隐藏文件 (但不包括.git
文件夹) :
export FZF_DEFAULT_COMMAND='fd --type file --follow --hidden --exclude .git'
你甚至可以通过设置fzf内的fd的颜色输出:
export FZF_DEFAULT_COMMAND="fd --type file --color=always" export FZF_DEFAULT_OPTS="--ansi"
有关详细信息,请参见 fzf reamde文件的提示部分.
使用fd与emacs
Emacs封装了find-file-in-project包, 这可以使用_fd_查找文件.
安装find-file-in-project
后,添加行(setq ffip-use-rust-fd t)
在你的~/.emacs
或~/.emacs.d/init.el
文件中.
在Emacs中,运行M-x find-file-in-project-by-selected
查找匹配文件. 或者,运行M-x find-file-in-project
列出项目中所有可用的文件.