我孤身走在路上, 石子在雾中发亮,夜很安静,荒原面对太空,星星互诉衷肠
使用FD代替find进行高效查询
使用FD代替find进行高效查询

使用FD代替find进行高效查询

fdfind都是非常强大的文件查找工具,但它们各有优劣。以下是一些主要的比较点:

fd的优点:

  1. 用户友好:fd默认忽略隐藏文件和.gitignore中的文件。它还会自动识别终端的颜色和分页设置。
  2. 快速:fd使用Rust的并行迭代器rayon进行多线程操作,因此在多核心系统上速度非常快。
  3. 简单:fd的语法比find简单得多。例如,你只需要输入fd PATTERN而不是find -iname '*PATTERN*'
  4. 功能强大:fd支持正则表达式、Unicode、符号链接跟踪等。
  5. 跨平台:fd支持Unix和Windows操作系统。

fd的缺点:

  1. 功能有限:尽管fd非常强大,但它并不包含find的所有功能。例如,fd不能按文件大小或修改日期搜索文件。
  2. 不是标准工具:fd不是Unix系统的标准部分,因此可能需要手动安装。而find则在几乎所有Unix系统中都预装了。

find的优点:

  1. 功能全面:find几乎可以按照任何条件搜索文件,包括文件大小、修改日期、权限等。
  2. 是标准工具:find是Unix系统的标准部分,因此在任何Unix系统中都可以使用。

find的缺点:

  1. 语法复杂:find的语法比fd复杂得多。例如,你需要输入find -iname '*PATTERN*'而不是fd PATTERN
  2. 速度慢:find不支持多线程操作,因此在大型文件系统中可能比fd慢。

fd是一个更现代、更快、更易用的文件查找工具,但find在功能上更全面。你可以根据你的具体需求选择使用哪一个工具。

下面是一些基本的使用示例:

  • 查找文件:fd PATTERN
  • 查找目录:fd -t d PATTERN
  • 使用正则表达式:fd -e rs '$'

fd是一个非常强大且易用的文件查找工具。

在 CentOS 上,你可以使用以下步骤来安装 fd 命令:

  1. 首先,你需要启用 EPEL (Extra Packages for Enterprise Linux) 仓库。在终端中运行以下命令:
sudo yum install epel-release
  1. 然后,你可以安装 fd 命令了:
sudo yum install fd-find

在 CentOS 7 中,你可能需要从 GitHub 或其他源手动下载并安装 fd 工具。以下是从 GitHub 下载并安装 fd 的步骤:

  1. 首先,你需要安装必要的编译工具。在终端中运行以下命令:
sudo yum install -y git gcc
  1. 接下来,从 GitHub 克隆 fd 的源代码:
git clone https://github.com/sharkdp/fd.git
  1. 进入到 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命令本身并不能直接搜索文件内容,但你可以结合使用fdgrep命令来实现这个功能。

例如,如果你要查找包含”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)来提供xargsgrep命令。

FD的一些demo:

当然可以,以下是你所需要的示例:

  1. 根据名字查找文件,包含隐藏文件:
fd -H 'filename'

-H 选项让 fd 包括隐藏文件在内。

  1. 根据名字查找目录:
fd -t d 'dirname'

-t d 选项让 fd 只查找目录。

  1. 根据文件创建日期查找文件:

fd 命令本身并不支持根据文件创建日期查找文件,但你可以使用 find 命令来实现这个功能。例如,以下命令会查找在过去 24 小时内创建的文件:

find . -type f -ctime 0
  1. 用正则查找文件名为 2020-11-05 这种类型的文件:
fd -E '^\d{4}-\d{2}-\d{2}$'

-E 选项让 fd 使用扩展的正则表达式。

  1. 用正则查找文件名中包含 1 开头,然后共计 13 位的手机号的文件:
fd -E '^1\d{12}$'

这个正则表达式匹配以 1 开头,然后是 12 个数字的字符串,这正好是 13 位的手机号。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

50 + = 57