Find是一个命令行实用程序,它允许您根据用户给定的表达式搜索文件系统层次结构中的文件和目录,并对每个匹配的文件应用用户指定的操作。
Linux Find命令是Linux系统管理员工具库中最强大的工具之一。
您可以使用该find
命令根据文件权限,类型,日期,所有权,大小等搜索文件。它还可以与其他工具结合使用,例如grep
或sed
对这些文件执行操作。
在讨论如何使用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
:套接字例如,如果要查找当前工作目录中的所有目录,可以使用:
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
如果要运行不区分大小写的搜索,请-name
使用-iname
以下命令更改选项:
sudo find /home/myfreax -type f -iname document.pdf
上面的命令将匹配Document.pdf,DOCUMENT.pdf ..etc。
按扩展名搜索文件与按名称搜索文件相同。例如,如果要查找以.log.gz
inside /var/log/nginx
目录结尾的所有文件,可以使用:
find /var/log/nginx -type f -name '*.log.gz'
值得一提的是,当您使用通配符时,您必须引用模式或*
使用反斜杠转义星号符号,\
以便shell不会解释它。
如果要查找与正则表达式不匹配的所有文件,*.log.gz
可以使用该-not
参数。例如,要查找不以*.log.gz
您结尾的所有文件,请使用:
find /var/log/nginx -type f -not -name '*.log.gz'
要根据文件大小查找文件,请将-size
参数与大小条件一起传递。您可以使用以下后缀指定文件大小:
b
:512字节块(默认)c
:字节w
:双字节字k
:KilobytesM
:兆字节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天/etc/dovecot/conf.d/
结束.conf
并在过去5天内进行了修改:
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
以下是使用该-daystart
选项根据修改日期过滤文件的另一个示例。
以下命令将列出/home
30天或更久前修改的目录中的所有文件:
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
,并将匹配文件的所有权更改www-data
为nginx
:
find / -user www-data -type f -exec chown nginx {} \;
要删除所有匹配的文件,请将参数添加-delete
到匹配表达式的末尾。
仅当您确定结果与要删除的文件匹配时,才确保使用此选项。在使用该-delete
选项之前打印匹配的文件总是一个好主意。
例如,要删除所有.temp
以/var/log/
您使用的文件结尾:
find /var/log/ -name `*.temp` -delete
请-delete
谨慎使用该选项。find命令行被计算为表达式,如果首先添加该-delete
选项,该命令将删除指定起始点下方的所有内容。
在本教程中,您已经学习了如何根据各种标准使用Linux查找实用程序,现在您应该对如何在Linux系统上查找文件有基本的了解,您还可以访问查找手册页并阅读“查找”命令的所有其他强大选项。
Copyright © 2021 .长沙麦涛网络科技有限公司 All rights reserved.
湘ICP备20015126号-2
联系我们