在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
您甚至可以搜索大小范围内的文件。 以下命令将查找之间的所有文件 1
和 2MB
:
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-data
至 nginx
:
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
命令。
如果您有任何疑问或意见,请在下面发表评论。
查找终端