在Linux中查找命令(查找文件和目录)

find 命令是Linux系统管理员中最强大的工具之一。 它根据用户给定的表达式在目录层次结构中搜索文件和目录,并且可以对每个匹配的文件执行用户指定的操作。

您可以使用 find 命令根据文件,目录的权限,类型,日期,所有权,大小等搜索文件和目录。 它也可以与其他工具结合使用,例如 grep 要么 sed

find 命令语法

的一般语法 find 命令如下:

find [options] [path...] [expression]
  • options 属性控制符号链接,调试选项和优化方法的处理。
  • path... 属性定义了find将在其中搜索文件的一个或多个起始目录。
  • expression 属性由选项,搜索模式和由运算符分隔的操作组成。

要在目录中搜索文件,用户调用 find 命令需要对该目录具有读取权限。

让我们看下面的例子:

find -L /var/www -name "*.js"
  • 选项 -L (选项)告诉 find 命令以跟随符号链接。
  • /var/www (路径…)指定要搜索的目录。
  • 表达方式) -name "*.js 告诉 find 搜索以结尾的文件 .js (JavaScript文件)。

按名称查找文件

按名称查找文件可能是最常用的 find 命令。 要通过文件名查找文件,请使用 -name 选项,后跟要搜索的文件名。

例如,搜索名为 document.pdf 在里面 /home/linuxize 目录,您将使用以下命令:

find /home/linuxize -type f -name document.pdf

要运行不区分大小写的搜索,请更改 -name 与选项 -iname

find /home/linuxize -type f -iname document.pdf

上面的命令将匹配“ Document.pdf”,“ DOCUMENT.pdf” .. etc。

按扩展名查找文件

按扩展名搜索文件与按名称搜索文件相同。 例如,查找以。结尾的所有文件 .log.gz 在 – 的里面 /var/log/nginx 目录,您将输入:

find /var/log/nginx -type f -name '*.log.gz'

重要的是要提到您必须引用模式或转义星号 * 带反斜杠的符号 这样,当您使用通配符时,外壳程序就不会解释它。

查找与正则表达式不匹配的所有文件 *.log.gz 您可以使用 -not 选项。 例如,查找不以结尾的所有文件 *.log.gz 您将使用:

find /var/log/nginx -type f -not -name '*.log.gz'

按类型查找文件

有时您可能需要搜索特定的文件类型,例如常规文件,目录或符号链接。 在Linux中,所有内容都是文件。

要根据文件类型搜索文件,请使用 -type 选项和以下描述符之一以指定文件类型:

  • f:常规文件
  • d: 目录
  • l:符号链接
  • c:字符设备
  • b:块设备
  • p:命名管道(FIFO)
  • s:插座

例如,要查找当前工作目录中的所有目录,可以使用:

find . -type d

常见示例是将网站文件权限递归更改为 644 和目录权限 755 使用 chmod 命令:

find /var/www/my_website -type d -exec chmod 0755 {} ;find /var/www/my_website -type f -exec chmod 0644 {} ;

按大小查找文件

要根据文件大小查找文件,请传递 -size 参数以及尺寸标准。 您可以使用以下后缀指定文件大小:

  • b:512字节块(默认)
  • c:字节
  • w:两字节字
  • k:千字节
  • M:兆字节
  • G:千兆字节

以下命令将查找完全相同的所有文件 1024 内的字节 /tmp 目录:

find /tmp -type f -size 1024c

find 命令还允许您搜索大于或小于指定大小的文件。

在以下示例中,我们搜索少于 1MB 在当前工作目录中。 注意减号 - 大小值前的符号:

find . -type f -size -1M

如果要搜索的文件大小大于 1MB,那么您需要使用加号 + 符号:

find . -type f -size +1M

您甚至可以搜索大小范围内的文件。 以下命令将查找之间的所有文件 12MB

find . -type f -size +1M -size 21M

按修改日期查找文件

find 命令还可以根据文件的最后修改,访问或更改时间来搜索文件。

与按大小搜索时相同,使用加号和减号表示“大于”或“小于”。

假设几天前,您修改了一个dovecot配置文件,但是却忘记了其中一个。 您可以轻松过滤“ /etc/dovecot/conf.d 以结尾的目录 .conf 并在最近五天内进行了修改:

find /etc/dovecot/conf.d -name "*.conf" -mtime 5

这是使用修改日期根据修改日期过滤文件的另一个示例 -daystart 选项。 下面的命令将列出 /home 被修改的目录 30 或更多天前:

find /home -mtime +30 -daystart

按权限查找文件

-perm 选项允许您基于文件许可权搜索文件。

例如,查找具有完全相同权限的所有文件 775 在 – 的里面 /var/www/html 目录,您将使用:

find /var/www/html -perm 644

您可以在数字模式前加上减号 - 或斜线 /

斜线时 / 用作前缀,则至少一个类别(用户,组或其他)必须至少设置相应的位,文件才能匹配。

考虑以下示例命令:

find . -perm /444

上面的命令将匹配所有为用户,组或其他用户设置了读取权限的文件。

如果减 - 用作前缀,然后要使文件匹配,至少必须设置指定的位。 以下命令将搜索对所有者和组具有读写权限并且可由其他用户读取的文件:

find . -perm -664

按所有者查找文件

要查找特定用户或组拥有的文件,请使用 -user-group 选项。

例如,搜索用户拥有的所有文件和目录 linuxize,您将运行:

find / -user linuxize

这是一个真实的例子。 假设您要查找用户拥有的所有文件 www-data 并从中更改匹配文件的所有权 www-datanginx

find / -user www-data -type f  -exec chown nginx {} ;

查找和删除文件

要删除所有匹配的文件,请附加 -delete 选项到match表达式的末尾。

确保仅在确信结果与要删除的文件匹配时,才使用此选项。 始终最好先打印匹配的文件,然后再使用 -delete 选项。

例如,删除所有以结尾的文件 .temp 来自 /var/log/,您将使用:

find /var/log/ -name `*.temp` -delete

使用 -delete 选择时要格外小心。 的 find 命令作为表达式求值,如果添加 -delete 选项首选项,该命令将删除您指定的起点以下的所有内容。

说到目录, find 只能删除空目录,与 rmdir

结论#

我们已经向您展示了如何使用 find 命令具有各种选项和条件。

本文应该使您对如何在Linux系统上定位文件有基本的了解。 您也可以访问 find 手册页,并阅读有关 find 命令。

如果您有任何疑问或意见,请在下面发表评论。

查找终端

Sidebar