Giter Site home page Giter Site logo

fd-zh's Introduction

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

最后,让我们运行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的速度,主要的耗时在regexignore,还有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] [<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 -H -E .git …

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

> fd -E /mnt/external-drive …

或跳过某些文件类型:

> fd -E '*.bak'

为了让这些模式永久不变,你可以创建一个.fdignore文件. 他们工作得很像.gitignore文件. 例如:

> cat ~/.fdignore
/mnt/external-drive
*.bak

使用fd 带xargsparallel

如果我们想在所有搜索结果上运行命令,我们可以将输出管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列出项目中所有可用的文件.

fd-zh's People

Contributors

chinanf-boy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

fd-zh's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.