如何在Linux上使用fd命令

时间:2020-01-09 10:39:54  来源:igfitidea点击:

在Linux上," fd"是" find"命令的更容易替代方法。它具有简化的语法,使用合理的默认值,并且具有内置的常识行为。让我们通过它的步伐。

fd vs find:有什么区别?

" fd"命令并不是要取代传统的" find"命令,该命令已经在Linux上永久存在。取而代之的是,fd试图以更直接的方式满足'find'的大多数常用用法,并且通常比'find'快八或者九倍。我们可以在项目的GitHub存储库页面上查看其一些基准。

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

fd默认是不区分大小写的。但是,如果搜索模式包含大写字母,fd会以区分大小写的方式运行。

安装fd

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

输入以下内容:

sudo apt-get install fd-find

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

alias fd=fdfind

要使别名保持不变,以便在重新启动后仍然可用,请将其放入.bashrc或者.bash_aliases文件中。

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

sudo dfn install fd-find

在Manjaro上,键入以下内容:

sudo pacman -Syu fd

fd与fdfind

为避免混淆,我们在Ubuntu测试PC上保留了命令的默认名称fdfind。 fd和fdfind是完全相同的命令,如下面的示例所示(如果我们要求fdfind显示其版本,则将其称为fd):

fdfind --version

我们将调用命令fed,但是在示例中,我们将使用Ubuntu fdfind。在其他Linux发行版中,可以键入fd而不是fdfind来保存一些按键。

使用fd进行简单搜索

如果使用不带命令行选项的fd,它的行为类似于ls,只是默认情况下它在子目录中列出文件。

输入以下内容:

fdfind

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

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

例如,我们可以键入以下内容:

fdfind -e png

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

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

fdfind index.page

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

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

fdfind passwd /etc

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

fdfind -e c coord

找到两个匹配的文件。

fd和Git

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

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

ls -adl .git*

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

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

fdfind coord
fdfind coord -I

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

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

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

文件类型和区分大小写

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

  • f:文件。

  • d:目录。

  • l:符号链接。

  • x:可执行文件。

  • e:空文件。

以下内容查找名为images的目录:

fdfind -td images

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

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

fdfind -tf geo
fdfind -tf Geo

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

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

命令执行

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

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

fdfinf -e zip

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

fdfind -e zip -x unzip {}

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

  • {}:找到的文件的完整文件路径和名称。

  • {/}:找到的文件的文件名。

  • {//}:包含找到的文件的目录。

  • {/。}:找到的文件的文件名,不带扩展名。

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

fdfind -e zip -x unzip {} -d {//}

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