如何在 Linux 上使用 fd 命令

在 Linux 上,fd
是 find
命令的更简单替代方法。它具有简化的语法、使用合理的默认值并具有内置的常识行为。让我们逐步了解它。
fd 与 find:有什么区别?
fd
命令并不是要取代传统的 find
命令,它一直在 Linux 上,嗯,永远。相反,fd
尝试以更直接的方式满足 find
的大多数常见用途,而且它通常比 find
快八到九倍>。你可以在项目的 GitHub 存储库页面上看到它的一些基准。
fd
有一个彩色输出,类似于某些 ls
模式。它是递归的,但默认情况下不搜索隐藏目录。它了解 Git,并且还会自动忽略“.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
以不区分大小写的方式运行。这意味着“Geo”和“geo”都是有效匹配。
我们的第二个命令包含一个大写字符,这导致 fd
以区分大小写的方式运行。这意味着只有“Geo”是有效匹配。
命令执行
fd
命令允许您启动另一个命令并对每个找到的文件执行它。
假设我们知道源代码目录树中某处有一个 Zip 文件。我们可以使用以下命令查找它,该命令搜索具有 ZIP 扩展名的文件:
fdfinf -e zip

使用 -x
(exec) 选项,您可以将找到的每个文件传递给另一个命令以供其处理。例如,我们可以键入以下命令来调用解压缩实用程序来解压缩我们的 ZIP 文件(“{}”是代表找到的文件的占位符):
fdfind -e zip -x unzip {}
这会将文件解压缩到当前工作目录中。如果我们希望将其解压缩到包含 ZIP 文件的目录中,我们可以使用以下占位符之一:
- {}:找到的文件的完整文件路径和名称。
- {/}:找到的文件的文件名。
- {//}:包含找到的文件的目录。
- {/.}:找到的文件的文件名,不带扩展名。
为了在包含它的目录中找到并解压缩我们的 ZIP 文件,我们可以使用 unzip -d
(目录)选项,并传入父目录占位符({//}
):
fdfind -e zip -x unzip {} -d {//}

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

您的首选?
因为它以如此简单的方式涵盖了最常见的用途,所以 fd
可以轻松成为您的首选“查找”命令。每当您需要它的更高级功能时,您总是可以返回到那个经验丰富的老手,find
。
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts