fd - 简单快速的 find 命令替代方法
fd 是一个命令行工具,用于在文件系统上查找文件。这个工具类似于 Linux 中的 find 命令,但 fd 使用起来更快捷、更简单。它不如 find 命令强大,但以简单的方式提供了 find 命令的基本功能。让我们看看 fd 工具的功能。
特征
- 简单的语法即 fd PATTERN
- 支持使用正则表达式
- 使用不同的颜色突出显示不同的文件类型
- 默认情况下,忽略隐藏的文件和目录。
- 忽略 .gitignore 中的模式,
- 由于并行目录遍历,输出速度快。
现在让我们看看fd工具的安装
安装
fd 工具可用于 Linux 的所有包管理器。根据您的系统使用以下命令之一安装 fd 工具:
对于 Debian/Ubuntu/Kali Linux:
sudo apt install fd-find
对于 Fedora:
sudo dnf install fd-find
对于 Alpine Linux
apk add fd
对于 Arch Linux:
pacman -S fd
对于带有 Homebrew 的 macOS:
brew install fd
对于 macOS
sudo port install fd
对于带有勺子的 Windows
scoop install fd
对于带有巧克力色的窗户:
choco install fd
对于 FreeBSD
pkg install fd-find
要使用 npm 安装 fd,请使用以下命令:
npm install -g fd-find
用法
现在让我们看看如何使用 fd 命令。
使用 fd 进行简单搜索
使用 fd 进行最基本的文件搜索是使用 fd 命令搜索特定模式。要使用 fd 命令搜索模式,只需提及一个模式,该模式应该是我们必须搜索的文件名的一部分。这是一个例子:
find lvm
fd 从当前目录递归搜索提供的模式。
正则表达式搜索
在 fd 命令中,每个带引号的模式都被视为正则表达式。要查找以“se”字符串结尾的文件,请使用以下命令
fd '.*s3$'
指定根目录
如果你想从另一个目录中搜索文件作为源目录,即 fd 将开始从提到的文件夹中递归搜索。这是一个例子:
fd profile /etc/
在上面的命令中,我们提供了 /etc/ 作为根文件夹。
递归列出所有文件
要递归列出当前目录中的所有文件,请使用 fd 命令。
fd
要列出其他目录中的所有文件,请使用包罗万象的模式,例如.或^提及目录路径:
fd . /src/
搜索特定的文件扩展名
要搜索具有特定文件扩展名的文件,请使用 -e 选项和 fd 并提及文件扩展名类型。
find -e md
我们还可以使用 -e 选项来查找带有扩展名的特定模式
fd -e js app
搜索特定文件名
要搜索准确提供的搜索模式,请在 fd 命令中使用 -g 或 –glob 选项:
fd -g libc.so /usr
隐藏和忽略的文件
默认情况下,fd 工具不显示隐藏的文件和目录。要在隐藏文件夹中搜索模式,请使用 –hidden 选项
fd -H pre-commit
如果您正在使用 git 存储库,那么 fd 将不会匹配 .gitingore 文件中的文件夹。要在 .gitignore 文件中的文件夹和文件中启用搜索,请使用 –no-ignore 或 -I 选项:
fd -I abbrev
匹配完整路径
默认情况下,fd 仅匹配具有模式的文件名以使用 -p 或 –full-path 选项匹配完整路径:
命令执行
除了查找模式之外,我们还可以使用 fd 命令做更多的事情。我们也可以使用 fd 命令来执行这些命令。 fd 提供了两个选项来执行命令
- -x / –exec :此选项对 fd 命令生成的每个结果执行命令。
- -X / –exec-batch:这个选项只会执行一个命令一次。
带有选项 -x 的示例:
要使用 clang 格式查找和格式化 .cpp 或 .h 文件,我们可以使用以下命令:
fd -e h -e cpp -x clang-format -i
选项 -X 的示例:
要在 vim 中打开当前目录中的所有文件,请使用以下命令:
fd -X vim
Fd 命令中的占位符
fd 命令中的占位符可用于通过 -x 选项更有效地处理命令。以下是用于将*.jpg 文件转换为*.png 文件的命令。
fd -e jpg -x convert {} {.}.png
在上面的命令中,{} 是表示搜索结果的占位符,{.} 这个选项与 {} 类似,但 {.} 占位符表示没有文件扩展名的搜索结果。
以下是可与 -x 或 -X 选项一起使用的占位符:
- {}:这是一个占位符,将替换为搜索结果的路径 (files/profile.jpg)。
- {.}:这是一个占位符,将替换为搜索结果的路径但没有扩展名(文件/配置文件)
- {/}:这是一个占位符,将替换为文件的基本名称 (profile.jpg)
- {//}:这是一个占位符,将替换为父发现的路径(文件/)
- {/.}:这是一个占位符,将替换为没有扩展名的文件名(配置文件)
排除特定文件或目录
如果要从 fd 命令中排除来的结果,请使用选项 -E 和 fd 命令。要搜索所有隐藏文件并排除 .git 目录,您可以使用以下命令:
fd -H -E .git
要从搜索中排除已安装的驱动器,我们可以使用以下命令:
fd -E /mnt/external-drive …
要永久排除文件,请在主目录中创建 .fdignore 文件,并将要忽略的文件放入该文件中
touch ~/.fdignore
echo /mnt/external-drive >> ~/.fdignore
要永久排除文件并全局放置要忽略的文件,请将它们放入 ~/.config/fd/ignore 文件。
删除文件
使用fd命令删除当前目录下扩展名为.cpp的文件,我们可以使用以下命令
fd -e cpp -X rm
如果要以交互方式删除文件,请使用选项 -i 和 -X 选项
fd -e cpp -X rm -i
要了解 fd 命令的所有选项,请在 fd 命令中使用 –help 选项:
fd --help
要了解有关 fd 命令的更多信息,请阅读 fd 的手册页。
man fd