Skip to content
On this page

Linux:使用Find命令搜索文件

🎫 教程内容于 2023-04-04 在以下平台验证通过
✅ Ubuntu 22.10
✅ Debian 11
✅ CentOS Stream 9
✅ macOS 13.2.1

Linux中的find命令是一个强大的工具,它允许您基于各种参数在给定目录层次结构中搜索文件和目录。在本教程中,我们将探讨如何使用find命令及其各种选项。

基本语法

find命令的基本语法如下:

sh
find [目录] [表达式]

这里,[目录]是您要在其中搜索文件的目录,[表达式]是您要应用的搜索条件。find命令将在给定的[目录]及其子目录中搜索与指定的[表达式]匹配的文件和目录。

find命令的输出是与指定搜索条件匹配的文件和目录列表。例如,如果运行以下命令:

sh
find . -name "*.txt"

您将获得当前目录及其子目录中所有具有.txt扩展名的文件列表:

./example.txt
./example2.txt
./subdir/example3.txt

通过文件名查找文件

要通过文件名查找文件,请使用 -name 选项,后跟您要查找的文件名。例如,要在当前目录及其子目录中搜索名为 example.txt 的文件,请使用以下命令:

sh
find . -name "example.txt"

这将在当前目录及其子目录中搜索所有名为 "example.txt" 的文件。

要搜索具有特定扩展名的所有文件,请使用 -name 选项,后跟通配符字符 * 和您要查找的扩展名。例如,要在当前目录及其子目录中搜索所有具有 .txt 扩展名的文件,请使用以下命令:

sh
find . -name "*.txt"

这将在当前目录及其子目录中搜索所有具有 .txt 扩展名的文件。

实际上,通配符字符 * 可以在文件名的任何部分中使用。例如:

sh
find . -name "example*"
find . -name "*example.txt"
find . -name "*example.*"

查找目录

要在当前目录及其子目录中搜索所有目录,请使用 -type 选项后跟 d。例如,要搜索当前目录及其子目录中的所有目录,请使用以下命令:

sh
find . -type d

这将在当前目录及其子目录中搜索所有目录。

按修改时间查找文件

要搜索在特定时间范围内修改的所有文件,请使用 -mtime 选项后跟天数。如果要搜索在过去 n 天内修改的文件,请使用负数 -n

例如,要搜索在过去 7 天内修改的所有文件,请使用以下命令:

sh
find . -mtime -7
find . -mtime -1w

-mtime 选项的默认时间单位为天。

您可以在 macOS 上使用其他时间单位:

  • s - 秒
  • m - 分钟
  • h - 小时
  • d - 天
  • w - 周

您还可以使用 -atime-ctime 选项根据文件的访问时间和创建时间搜索文件。

按文件大小查找文件

要搜索所有大于特定大小的文件,请使用 -size 选项,后跟带有 + 符号的字节数大小。要搜索所有小于特定大小的文件,请使用 -size 选项,后跟带有 - 符号的字节数大小。

例如,要在当前目录及其子目录中搜索所有大于 10MB 的文件,请使用以下命令:

sh
find . -size +10M

这将在当前目录及其子目录中搜索所有大于 10MB 的文件。

您可以使用的常见大小单位是:

  • c - 字节
  • k - 千字节(1024 字节)
  • M - 兆字节(1024 千字节)
  • G - 吉字节(1024 兆字节)
  • T - 太字节(1024 吉字节)
  • P - 拍字节(1024 太字节)

组合搜索条件

您可以组合多个搜索条件以查找符合特定条件的文件。例如,要搜索在过去 7 天内修改的具有特定扩展名的所有文件,请使用以下命令:

sh
find . -name "*.txt" -type f -mtime -7

这将在当前目录及其子目录中搜索所有在过去 7 天内修改的具有 .txt 扩展名的文件。

使用 find 命令的输出

您可以以各种方式使用 find 命令的输出。以下是一些示例:

要将 find 命令的输出保存到文件中,请使用以下命令:

sh
find . -name "*.txt" > files.txt

这将把所有扩展名为 .txt 的文件名保存到名为 files.txt 的文件中。

要将 find 命令的输出用作另一个命令的输入,请使用 xargs 命令。

例如,要删除具有特定扩展名的所有文件,请使用以下命令:

sh
find . -name "*.txt" -type f | xargs rm

要对 find 命令找到的每个文件执行操作,请使用 -exec 选项。

例如,要更改具有特定扩展名的所有文件的权限,请使用以下命令:

sh
find . -name "*.txt" -type f -exec chmod 644 {} \;

-exec 参数的语法是:

sh
-exec command {} \;
  • command 是您要在 find 找到的文件上执行的命令。
  • {} 是一个占位符,将被 find 找到的文件的名称替换。
  • \; 用于终止命令并表示 -exec 参数的结束。 使用 wc 命令来计算 find 命令找到的文件数量。例如,要计算具有特定扩展名的文件数量,请使用以下命令:
sh
find . -name "*.txt" -type f | wc -l

结论

Linux 中的 find 命令是一个强大的工具,它允许您根据各种条件搜索文件和目录。通过使用其各种选项和组合搜索条件,您可以快速找到所需的文件和目录。您还可以以各种方式使用 find 命令的输出来对找到的文件执行操作。