如何在 Linux 上使用 fd 命令

已发表: 2022-01-29
Linux PC 上的终端窗口,带有 Ubuntu 风格的桌面。
Fatmawati Achmad Zaenuri/Shutterstock

在 Linux 上, fdfind命令的一种更简单的替代方法。 它具有简化的语法,使用合理的默认值,并具有内置的常识行为。 让我们逐步了解它。

fd 与 find:有什么区别?

fd命令并不是要取代传统的find命令,它一直在 Linux 上,嗯,永远。 相反, fd试图以更直接的方式满足find的大多数常见用途——而且,它通常比find快八到九倍。 您可以在项目的 GitHub 存储库页面上查看它的一些基准测试。

10 个适合初学者的基本 Linux 命令
相关10 个适合初学者的基本 Linux 命令

fd具有彩色输出,类似于某些ls模式。 它是递归的,但默认情况下不搜索隐藏目录。 它知道 Git,并且会自动忽略“.gitignore”文件中的任何模式。

fd默认情况下不区分大小写。 但是,如果您的搜索模式包含大写字母,则fd会以区分大小写的模式运行。 当然,您可以覆盖默认值,但在许多情况下,它们对您有利。

相关:如何使用所有 Linux 的搜索命令

安装 fd

从 Ubuntu 19.04 (Disco Dingo) 开始,您可以通过使用apt-get调用官方维护的软件包来直接安装fd 。 如果您运行的是旧版本的 Ubuntu,请查看 Git 中心页面上的安装说明。

键入以下内容:

 sudo apt-get install fd-find 

广告

在 Ubuntu 中,该命令是fdfind以避免与另一个现有实用程序发生名称冲突。 如果你希望它是fd ,你可以设置一个别名:

 别名 fd=fdfind 

要使别名持久化以便在重新启动后仍然可用,请将其放入“.bashrc”或“.bash_aliases”文件中。

相关:如何在 Linux 上创建别名和 Shell 函数

要在 Fedora 上安装fd ,请输入以下命令:

 sudo dfn install fd-find 

在 Manjaro 上,键入以下内容:

 sudo pacman -Syu fd 

fd 与 fdfind

为避免混淆,我们在 Ubuntu 测试 PC 上保留了该命令的默认名称fdfindfdfdfind是完全相同的命令,正如您将在以下示例中看到的那样(如果您要求fdfind显示其版本,它称自己为“fd”):

 fdfind --版本

我们将调用命令“fed”,但在示例中,我们将使用 Ubuntu 的“fdfind”。 在其他 Linux 发行版上,您可以键入“fd”而不是“fdfind”以节省一些击键。

使用 fd 进行简单搜索

如果你使用fd没有命令行选项,它的行为有点像ls ,除了它默认列出子目录中的文件。

键入以下内容:

 查找

对于不同的文件类型和目录,输出以不同的颜色显示。

广告

要查看特定类型的文件,请使用-e (扩展名)选项。 请注意,您不必在扩展名前加上句点 (.),也不区分大小写。

例如,您可以键入以下内容:

 fdfind -e png 

现在,列出的唯一文件是 PNG 图像文件。

要查找单个文件,请在命令行中键入其名称,如下所示:

 fdfind index.page 

找到该文件并且恰好位于子目录中。 我们不必告诉fd递归搜索。

要在特定目录中开始搜索,请在命令行中包含文件路径。 以下命令将在“/etc”目录中开始搜索,并查找文件名中包含“passwd”的文件:

 fdfind 密码 /etc 

在这里,我们正在搜索文件名中包含“coord”的所有 C 源代码文件:

 fdffind -ec 坐标

找到了两个匹配的文件。

fd 和 Git

Git 是一个非常流行的源代码版本控制系统。 如果您在计算机上使用 Git,您可能会使用“.gitignore”文件来告诉 Git 它应该关注哪些文件,以及可以忽略哪些文件。 默认情况下, fd尊重“.gitignore”文件中的设置。

广告

在这个目录中,我们有一个 Git 存储库和“.gitignore”文件。 我们输入以下内容:

 ls -adl .git* 

让我们让fd列出文件名中包含“coord”的所有文件。 然后我们将重复搜索并使用-I (不忽略)选项。 这告诉fd忽略“.gitignore”文件中的设置并报告每个匹配的文件。

为此,我们键入以下内容:

 fd查找坐标
fdfind 坐标 -I 

第二组结果中的两个额外文件是目标文件。 这些是在编译文件程序时创建的。 然后链接器使用它们来创建程序的最终可执行版本。

源代码版本控制程序通常会忽略目标文件。 每次编译程序时它们都会重新生成,因此您不必存储它们的副本。 “.gitignore”文件中有一个条目指示 Git 忽略目标文件,默认情况下, fd也会忽略它们。

-I (不忽略)选项强制fd返回它找到的所有内容,而不是由“.gitginore”文件引导。

文件类型和区分大小写

您可以要求fd查找目录、文件(包括可执行文件和空文件)和符号链接。 您可以使用-t (类型)选项,后跟以下字母之一:

  • f :文件。
  • d :目录。
  • l :符号链接。
  • x :可执行文件。
  • e : 空文件。

下面查找名为 images 的目录:

 fdfind -td 图片

广告

找到一个匹配项,比当前子目录低一个子目录。

让我们看看区分大小写如何与搜索模式一起工作。 我们键入以下内容首先搜索文件名中包含“geo”的文件,然后搜索文件名中包含“Geo”的文件:

 fdffind -tf 地理
fdfind -tf 地理

在第一个命令中,我们使用了小写搜索模式,这导致fd以不区分大小写的方式运行。 这意味着“Geo”和“geo”都是有效的匹配项。

我们的第二个命令包含一个大写字符,这导致fd以区分大小写的方式运行。 这意味着只有“Geo”是有效匹配。

命令执行

fd命令允许您启动另一个命令并在每个找到的文件上执行它。

假设我们知道在我们的源代码目录树中某处有一个 Zip 文件。 我们可以使用以下命令查找它,该命令会搜索带有 ZIP 扩展名的文件:

 fdffinf -e 压缩包

广告

使用-x (exec) 选项,您可以将每个找到的文件传递给另一个命令以由它处理。 例如,我们可以键入以下内容来调用解压缩实用程序来解压缩我们的 ZIP 文件(“{}”是代表找到的文件的占位符):

 fdffind -e zip -x 解压{}

这将解压缩当前工作目录中的文件。 如果我们希望将其解压缩到包含 ZIP 文件的目录中,我们可以使用以下占位符之一:

  • {} :找到的文件的完整文件路径和名称。
  • {/} : 找到的文件的文件名。
  • {//} :包含找到的文件的目录。
  • {/.} :找到的文件的文件名,不带扩展名。

为了在包含它的目录中找到并解压缩我们的 ZIP 文件,我们可以使用 unzip -d (目录)选项,并传入父目录占位符( {//} ):

 fdffind -e zip -x 解压 {} -d {//} 

然后找到 ZIP 文件并将其解压缩到其父目录中。

你的首选?

因为它以如此简单的方式涵盖了最常见的用途,所以fd可以很容易地成为您的首选“查找”命令。 每当您需要它更高级的功能时,您总是可以回到那个经验丰富的老手, find .

相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑