在Linux上,它fd是该find命令的替代方法 。它具有简化的语法,使用合理的默认值,并且具有内置的常识行为。让我们通过它的步伐。
一、fd vs find:有什么区别?
fd命令并不是要取代传统的find命令,fd 尝试以find更直接的方式满足大多数的常用用法,它的速度通常比find快8到9倍。您可以在项目的GitHub存储库页面上查看其一些基准测试。
fd具有彩色输出,类似于某些ls模式。它是递归的,但默认情况下不会搜索隐藏目录。它了解Git,还将自动忽略“.gitignore”文件中的任何模式。
fd默认情况下不区分大小写。如果您的搜索模式包含大写字母,请 fd在区分大小写的模式下运行。当然,您可以覆盖默认值,但是在许多情况下,它们对您有利。
二、安装fd
从Ubuntu 19.04开始,您可以fd使用调用正式维护的软件包来直接安装apt-get。如果你运行的是Ubuntu的旧版本,请查看Git hub页面的安装说明。
输入以下内容:
sudo apt-get install fd-find
在Ubuntu中,该命令是fdfind 避免与另一个现有实用程序发生名称冲突。如果您希望它是fd,则可以设置别名:
alias fd=fdfind
要使别名保持不变,以便在重新启动后仍然可用,请将其放入“.bashrc”或“.bash_aliases”文件中。
要fd在Fedora上安装,请键入以下命令:
sudo dfn install fd-find
sudo dnf在终端窗口中安装fd-find。
在Manjaro上,键入以下内容:
sudo pacman -Syu fd
三、fd与fdfind
为避免混淆,我们在fdfindUbuntu测试PC上保留了默认名称的命令 。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(type)选项,然后加上以下字母之一来实现:
f:文件。
d:目录。
l:符号链接。
x:可执行文件。
e:空文件。
以下内容查找名为images的目录:
fdfind -td images
找到一个匹配项,子目录比当前子目录低。
让我们看看区分大小写如何与搜索模式一起使用。我们键入以下内容,首先搜索文件名中包含“ geo”的文件,然后搜索文件名中包含“ Geo”的文件:
fdfind -tf geo
fdfind -tf Geo
在第一个命令中,我们使用小写搜索模式,该模式导致 fd不区分大小写的方式运行。这意味着“地理位置”和“地理位置”都是有效的匹配项。
我们的第二个命令包含一个大写字符,该字符 fd以区分大小写的方式运行。这意味着只有“ Geo”是有效的匹配项。
六、命令执行
该 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文件,并将其解压缩到其父目录中。
在终端窗口中从fdfind -e zip -x unzip {} -d {//}输出。