目录
大多数Linux用户都非常熟悉find命令以及可以使用的许多情况。今天我们将回顾一个名为
fd
的命令的替代方法。
fd
,是一款简单,快速且用户友好的工具,与查找
相比,其工作速度更快。它并不是要完全取代find
,而是为您提供一种易于使用的替代方案,其执行速度稍快一些。
fd特点
- 直观的语法:fd PATTERN而不是
find -iname '*PATTERN*'
. - 正则表达式(默认)和基于 glob 的模式。
- 由于并行目录遍历,速度非常快。
- 使用颜色突出显示不同的文件类型(与ls相同)。
- 支持并行命令执行
- 智能大小写:默认情况下搜索不区分大小写。如果模式包含大写字符
*
,则切换为区分大小写。 - 默认情况下忽略隐藏的目录和文件。
- .gitignore默认情况下,忽略来自您的模式。
- 命令名称比find短50% 。
如何在Linux中安装fd
我们将看看如何在不同的Linux发行版中安装
fd
。
对于
Ubuntu
和Debian
的发行版,您需要从发布页面下载最新的fd版本并使用以下命令进行安装。
$ wget https://github.com/sharkdp/fd/releases/download/v0/fd-musl_0_amddeb
$ sudo dpkg -i fd-musl_0_amddeb
在其他Linux发行版上,您可以使用包管理器从默认存储库安装fd
# dnf install fd-find [On Fedora]
# pacman -S fd [On Arch Linux]
# emerge -av fd [On Gentoo]
# zypper in fd [On OpenSuse]
# brew install fd [On macOS]
CentOS安装
# wget https://github.com/sharkdp/fd/releases/download/v7.4.0/fd-v7.4.0-x86_64-unknown-linux-musl.tar.gz
# tar -zxvf fd-v7.4.0-x86_64-unknown-linux-*.tar.gz
# cd fd-v7.4.0-x86_64-unknown-linux-*
# cp ./fd /usr/local/bin/
# cp ./fd.1 /usr/local/share/man/man1/
# mandb
命令选项
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)
如何在Linux中使用fd
与find命令类似,
fd
有许多用例,但让我们从检查可用选项开始:
# fd -h
OR
# fd --help
我们来看看几个例子。您可以在没有任何参数的情况下运行
fd
,输出与ls -R命令非常相似。
# fd
在下一个
fd
示例中,我将使用位于/var/www/html/
中的默认WordPress安装来搜索不同的文件和文件夹。
在下面的示例中,我仅使用前10个结果来缩短命令输出。
# fd | head
假设我们想找到所有的jpg文件。我们可以使用
- e
标志按文件扩展名进行过滤:
# fd -e jpg
- e
标志可以与这样的模式结合使用:
# fd -e php index
上面的命令将查找扩展名为
php
的文件,并在其中包含字符串index
:
如果要排除某些结果,可以使用
- E
标志,如下所示:
# fd -e php index -E rumenz
此命令将查找包含php扩展名的所有文件,其中包含字符串
index
,并将排除rumenz
目录中的结果。
如果要指定搜索目录,只需将其作为参数提供:
# fd <pattery> <directory>
就像
find
一样,您可以使用-x
或- exec
参数来执行搜索结果的并行命令执行。
这是一个示例,我们将使用
chmod
来更改图像文件的权限
# fd -e jpg -x chmod 644 {}
以上内容将找到扩展名为
jpg
的所有文件,并将运行chmod 644 <path-to-file>
递归地找到所有 zip 档案并解压它们
# fd -e zip -x unzip
所有
*.jpg
文件转换为*.png
文件
# fd -e jpg -x convert {} {.}.png
以下是括号的一些有用的解释和用法:
- {} – 一个占位符,它将随着搜索结果的路径而改变(rumenz/uploads/01.jpg)。
- {.}– 类似于{},但不使用文件扩展名 (rumenz/uploads/01)。
- {/}:将被搜索结果的基本名称替换的占位符 (01.jpg)。
- {//}: 发现路径的父目录 (rumenz/uploads)。
- {/.}: 只有基名,没有扩展名 (01)。
这是对
fd命令
的简要回顾,一些用户可能会发现更容易使用和更快。正如本文前面提到的,fd
并不是要完全取代find
,而是提供简单的用法,更轻松的搜索和更好的性能。Fd
不占用太多空间,是您的武器库中的一个很好的工具。