fd和find都是非常强大的文件查找工具,但它们各有优劣。以下是一些主要的比较点:
fd的优点:
- 用户友好:
fd默认忽略隐藏文件和.gitignore中的文件。它还会自动识别终端的颜色和分页设置。 - 快速:
fd使用Rust的并行迭代器rayon进行多线程操作,因此在多核心系统上速度非常快。 - 简单:
fd的语法比find简单得多。例如,你只需要输入fd PATTERN而不是find -iname '*PATTERN*'。 - 功能强大:
fd支持正则表达式、Unicode、符号链接跟踪等。 - 跨平台:
fd支持Unix和Windows操作系统。
fd的缺点:
- 功能有限:尽管
fd非常强大,但它并不包含find的所有功能。例如,fd不能按文件大小或修改日期搜索文件。 - 不是标准工具:
fd不是Unix系统的标准部分,因此可能需要手动安装。而find则在几乎所有Unix系统中都预装了。
find的优点:
- 功能全面:
find几乎可以按照任何条件搜索文件,包括文件大小、修改日期、权限等。 - 是标准工具:
find是Unix系统的标准部分,因此在任何Unix系统中都可以使用。
find的缺点:
- 语法复杂:
find的语法比fd复杂得多。例如,你需要输入find -iname '*PATTERN*'而不是fd PATTERN。 - 速度慢:
find不支持多线程操作,因此在大型文件系统中可能比fd慢。
fd是一个更现代、更快、更易用的文件查找工具,但find在功能上更全面。你可以根据你的具体需求选择使用哪一个工具。
下面是一些基本的使用示例:
- 查找文件:
fd PATTERN - 查找目录:
fd -t d PATTERN - 使用正则表达式:
fd -e rs '$'
fd是一个非常强大且易用的文件查找工具。
在 CentOS 上,你可以使用以下步骤来安装 fd 命令:
- 首先,你需要启用 EPEL (Extra Packages for Enterprise Linux) 仓库。在终端中运行以下命令:
sudo yum install epel-release
- 然后,你可以安装
fd命令了:
sudo yum install fd-find
在 CentOS 7 中,你可能需要从 GitHub 或其他源手动下载并安装 fd 工具。以下是从 GitHub 下载并安装 fd 的步骤:
- 首先,你需要安装必要的编译工具。在终端中运行以下命令:
sudo yum install -y git gcc
- 接下来,从 GitHub 克隆
fd的源代码:
git clone https://github.com/sharkdp/fd.git
- 进入到
fd的目录,并编译安装:
cd fd cargo build --release sudo cp target/release/fd /usr/local/bin/
注意:上述步骤中的 cargo build --release 命令需要 Rust 的 cargo 工具。如果你的系统中没有安装 Rust 和 cargo,你可以运行 curl https://sh.rustup.rs -sSf | sh 来安装。
安装完成后,你就可以使用 fd 来查找文件了。以下是在 指定目录 目录下查找包含 指定内容 且后缀为 .xml 的文件的命令:
fd -e xml -x grep -l "指定内容" 指定目录
在这个命令中,-e xml 表示只查找后缀为 .xml 的文件,-x 后面跟的是每找到一个符合条件的文件要执行的命令,grep -l "指定内容" 会在找到的文件中搜索指定的内容,如果找到了就输出该文件的路径。
安装完成后,你可以使用 fdfind 命令来代替 fd 命令。这是因为 fd 命令在某些系统中可能与其他程序冲突,所以在这些系统中,fd 会被安装为 fdfind。
如果你希望能够直接使用 fd 命令,你可以创建一个别名。在你的 shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)中添加以下行:
alias fd=fdfind
然后,运行 source ~/.bashrc(或 source ~/.zshrc)来应用新的配置。现在就可以直接使用 fd 命令了。
fd根据文件内容进行查找
fd命令本身并不能直接搜索文件内容,但你可以结合使用fd和grep命令来实现这个功能。
例如,如果你要查找包含”abc”的文件,你可以使用以下命令:
fd -HI -e txt | xargs grep -l 'abc'
这个命令的意思是:
fd -HI -e txt:使用fd查找所有扩展名为txt的文件。-H选项使fd包含隐藏文件,-I选项使fd忽略.gitignore文件。xargs grep -l 'abc':对fd的输出(即文件名)使用xargs命令,这会把每个文件名传递给grep命令。grep -l 'abc'会在每个文件中查找字符串”abc”,并打印出包含该字符串的文件名。
这个命令需要在Unix-like系统(如Linux或Mac OS)中运行。如果你在Windows系统中,可能需要安装额外的工具(如Cygwin或WSL)来提供xargs和grep命令。
FD的一些demo:
当然可以,以下是你所需要的示例:
- 根据名字查找文件,包含隐藏文件:
fd -H 'filename'
-H 选项让 fd 包括隐藏文件在内。
- 根据名字查找目录:
fd -t d 'dirname'
-t d 选项让 fd 只查找目录。
- 根据文件创建日期查找文件:
fd 命令本身并不支持根据文件创建日期查找文件,但你可以使用 find 命令来实现这个功能。例如,以下命令会查找在过去 24 小时内创建的文件:
find . -type f -ctime 0
- 用正则查找文件名为 2020-11-05 这种类型的文件:
fd -E '^\d{4}-\d{2}-\d{2}$'
-E 选项让 fd 使用扩展的正则表达式。
- 用正则查找文件名中包含 1 开头,然后共计 13 位的手机号的文件:
fd -E '^1\d{12}$'
这个正则表达式匹配以 1 开头,然后是 12 个数字的字符串,这正好是 13 位的手机号。