如何使用find命令行在Linux中查找文件
find
命令是Linux系统管理员中最强大的工具之一。它根据用户给定的表达式在目录层次结构中搜索文件和目录,并且可以对每个匹配的文件执行用户指定的操作。
您可以使用find
命令根据其权限,类型,日期,所有权,大小等搜索文件和目录。它也可以与其他工具(例如grep
或sed
)结合使用。
linux-find-">Linux 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
选项。
例如,要在/home/myfreax
目录中搜索名为document.pdf
的文件,可以使用以下命令:
find /home/myfreax -type f -name document.pdf
要运行不区分大小写的搜索,请将-name
选项更改为-iname
:
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解释它。
要查找与正则表达式*.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
常见示例是使用 chmod
命令将网站文件权限递归更改为644
,目录权限更改为755
:
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
:千兆字节
以下命令将在/tmp
目录中找到所有1024
个字节的文件:
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
命令还可以根据文件的最后修改,访问或更改时间来搜索文件。
与按大小搜索时相同,使用加号和减号表示“大于”或“小于”。
假设几天前,您修改了一个鸽舍配置文件,但您忘记了其中一个。您可以轻松过滤/etc/dovecot/conf.d
目录下以.conf
结尾并且在最近五天内已被修改的所有文件:
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
选项之前,最好先打印匹配的文件。
例如,要从/var/log/
中删除所有以.temp
结尾的文件,您可以使用:
find /var/log/ -name `*.temp` -delete
请谨慎使用-delete
选项。 find命令行被评估为表达式,如果您首先添加-delete
选项,该命令将删除您指定的起点以下的所有内容。
关于目录,find
只能删除与 rmdir
相同的空目录。
结论
我们向您展示了如何在各种选项和条件下使用find
命令。
本文应该使您对如何在Linux系统上定位文件有基本的了解。您也可以访问 find
手册页,并阅读find
命令的所有其他强大功能。
如有任何疑问或评论,请在下面发表评论。
以上是 如何使用find命令行在Linux中查找文件 的全部内容, 来源链接: utcz.com/z/507121.html