Linux如何使用find命令搜索文件

linux

Find是一个命令行程序,它允许您根据用户给定的表达式搜索文件系统层次结构中的文件和目录,并对每个匹配的文件应用用户指定的操作。

Linux Find命令是Linux系统管理员工具库中最强大的工具之一。

在本教程中,我们将说明如何使用find命令根据文件权限,类型,日期,所有权,大小,名称,扩展名,修改日期,权限,所有者查找文件以及find命令基础语法与选项。它还可以与其他工具结合使用,例如grepsed对这些文件进行操作。

linux-find-">Linux find命令语法

在讨论如何使用find命令之前,让我们先回顾一下基本语法,find命令表达式采用以下形式:

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

我们来看看下面的例子:

find  -L /home/projects/ -name "*.js" -exec chmod 644 {} \;

此命令包含一个参数-L(options),它允许find命令跟随符号链接,搜索/home/projects/(path ...)下面的整个目录树,查找以.js(expression)结尾的所有文件,并将所有匹配文件的权限设置为644。

按类型查找文件

要指定要查找的文件类型,请使用-type参数。

  • f:文件
  • d:目录
  • l:符号链接
  • c:角色设备
  • b:块设备
  • p:命名管道(FIFO)
  • s:套接字socket

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

find . -type d

如果要列出系统上的所有字符设备:

find / -type c

要将所有文件权限更改为644并将所有目录权限更改为755,请运行以下命令:

find /var/www/my_project -type d -exec chmod 0755 {} \;

find /var/www/my_project -type f -exec chmod 0644 {} \;

按名称查找文件

按名称查找文件可能是find命令最常用的用法。要按名称查找文件,请将-name选项与要搜索的文件的名称一起传递。

要在/home/myfreax目录中搜索名为document.pdf的文件,请使用以下命令:

sudo find /home/myfreax -type f -name document.pdf

如果要运行不区分大小写的搜索,请使用-iname选项:

sudo find /home/myfreax -type f -iname document.pdf

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

按扩展名查找文件

按扩展名搜索文件与按名称搜索文件相同。例如,如果要在 /var/log/nginx查找以.log.gz结尾的所有文件,可以使用:

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

值得一提的是,当您使用通配符时,您必须引用模式或*使用反斜杠转义*符号,\表示转义,使shell不会解释它。

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

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

按大小查找文件

要根据文件大小查找文件,请将-size参数与大小条件一起传递。您可以使用以下后缀指定文件大小:

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

例如,要在/tmp目录中查找1024字节的所有文件,运行以下命令:

find /tmp -type f -size 1024c

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

在下面的示例中,我们在当前工作目录中搜索小于1MB的所有文件,注意-大小值之前的减号:

find . -type f -size -1M

如果要搜索大小超过1MB的文件,则需要使用加号+

find . -type f -size +1M

您甚至可以搜索大小范围内的文件。例如,以下命令将查找介于1和2 MB之间的所有文件:

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

按修改日期查找文件

find命令还可以根据上次修改,访问或更改时间搜索文件。与按大小搜索时相同,您可以使用加号和减号来指定大于或小于。

假如几天前你修改了一个dovecot配置文件,但你忘了文件名。您可以轻松过滤目录中指定时间范文内的所有文件,假设这些文件你在过去5天内进行了修改:

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

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

find /home -mtime +30 -daystart

按权限查找文件

要根据文件权限过滤文件,请使用-perm选项。例如,要在/var/www/html目录中查找权限为775的所有文件:

find /var/www/html -perm 644

您可以使用减号-/斜杠为数字模式添加前缀。当斜杠/用作前缀时,至少一个权限位(用户,组或其他)与文件匹配。请考虑以下示例命令:

find . -perm /444

上述命令将匹配为用户,组或其他人设置了读权限的文件。如果使用减号-作为前缀,权限位必须全匹配。以下命令将搜索对所有者和组具有读写权限的文件,并且可供其他用户读取:

find . -perm -664

按所有者查找文件

要查找特定用户或组拥有的文件,可以使用-user-group选项。例如,要搜索myfreax用户拥有的所有文件和目录,您将运行:

find / -user myfreax

这个是更高级的示例,假设您要查找www-data用户拥有的所有文件,并将匹配文件的所有权更改为nginx

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

查找和删除文件

要删除所有匹配的文件,请将参数添加-delete到匹配表达式的末尾。仅当您确定结果与要删除的文件匹配时,才确保使用此选项。在使用-delete选项之前打印匹配的文件总是一个好主意。例如,要在/var/log/目录中删除所有以.temp结尾的文件:

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

请谨慎使用-delete选项。find命令行被计算为表达式,如果添加-delete选项,该命令将删除指定起始点下的所有匹配内容。

结论

在本教程中,您已经学习了如何根据各种标准使用Linux find命令,现在您应该对如何在Linux系统上查找文件有基本的了解,您还可以访问find手册页并阅读find命令的其他选项。如果您有任何问题或意见,请在下面留言。

以上是 Linux如何使用find命令搜索文件 的全部内容, 来源链接: utcz.com/z/506914.html

回到顶部