Need help with fd-zh?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

chinanf-boy
179 Stars 20 Forks 7 Commits 5 Opened issues

Description

🇨🇳翻译: <fd> 一种简单,快速和用户友好的 >find< 替代方案 ❤️ 校对 ✅

Services available

!
?

Need anything else?

Contributors list

fd translate-svg

fd是一种简单ㄡ快速和用户友好的find替代方案.」

中文 | english


校对 ✅

翻译的原文

与日期 最新更新 更多
commit ⏰ 2018 8.20 last 中文翻译

贡献

欢迎 👏 勘误/校对/更新贡献 😊 具体贡献请看

生活

If help, buy me coffee —— 营养跟不上了,给我来瓶营养快线吧! 💰


目录

fd

Build Status Build status Version info

fd是一种简单ㄡ快速和用户友好的fd替代方案.

虽然它不寻求复刻find所有强大的功能,但它提供了明智的 (自定的) 80%的用例.

特征

  • 方便语法:
    fd PATTERN
    而不是
    find -iname '*PATTERN*'
    .
  • 彩色终端输出 (类似于ls)
  • 它是快速的 (见基准下面) .
  • 聪明案例: 默认情况下,搜索不区分大小写. 如果模式包含大写字符*, 则切换为区分大小写字符. .
  • 默认情况下,忽略隐藏的目录和文件.
  • 忽略匹配你
    .gitignore
    文件中的模式,默认情况.
  • 正则表达式.
  • Unicode感知.
  • 命令输入量50%优于*
    find
    : -)
  • 用类似于GNU穿行的语法,执行并行命令.

演示

Demo

基准

让我们搜索我的主文件夹的以

[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个文件: :smile: .

最后,让我们运行

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
:
dnf install fd-find

对于旧版本,您可以使用Fedora copr安装

fd
:
dnf copr enable keefle/fd
dnf install fd

Arch Linux

你可以从官方回购安装fd 软件包:

pacman -S fd

Gentoo Linux

你可以从官方回购使用fd 软件包:

emerge -av fd

openSUSE Linux

你可以从官方回购安装fd 软件包:

zypper in fd

Void Linux

你可以安装

fd
通过xbps安装:
xbps-install -S fd

macOS

你可以安装

fd
具有brew:
brew install fd

或与Mac port:

sudo port install fd

Windows

您可以从中 releases页面,下载预构建的二进制文件.

或者,您可以安装

fd
通过Scoop:
scoop install fd

或通过Chocolatey:

choco install fd

NixOS / via Nix

你可以使用NixOS 包管理安装

fd
:
nix-env -i fd

FreeBSD

你可以安装

sysutils/fd
通过patmaster:
portmaster sysutils/fd

源码文件

你可以通过rust的包管理cargo安装fd:

cargo install fd-find

注意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] [] [...]

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

ARGS: the search pattern, a regular expression (optional) ... 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 -H -E .git …

我们也可以用这个来跳过安装的目录:

> fd -E /mnt/external-drive …

或跳过某些文件类型:

> fd -E '*.bak' …

为了让这些模式永久不变,你可以创建一个

.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 
在你的终端打开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
列出项目中所有可用的文件.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.