千家信息网

find文件命令查找详解

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,find命令详解大家或多或少使用过windows的文件查找,针对整个文件系统、部分分区,以文件名、时间等条件来进行文件查找。在Linux中主要通过locate和find这两个命令,来完成对文件查找。首
千家信息网最后更新 2024年09月22日find文件命令查找详解

find命令详解

大家或多或少使用过windows的文件查找,针对整个文件系统、部分分区,以文件名、时间等条件来进行文件查找。在Linux中主要通过locate和find这两个命令,来完成对文件查找。


首先,简单讲一下locate和find这两个命令的适应场景和各自特点。locate和find在Linux中都可以实现基于文件系统查找符合条件的文件,却有各自的特点和使用场景。locate命令在文件系统上实现文件查找,是基于事先构建好的搜索数据库来完成的。locate命令通过搜索数据库,而不是每次查找都遍历指定的文件系统,因此,可以快速的检索查找统计出符合条件的文件。


locate命令搜索查找的是数据库,数据库中有的文件,可以快速的查找,数据库中还未更新的,则无法查找到,因此通过locate命令查找文件,是非实时的查找,最近创建的文件还未在数据库中建立相关的索引等信息,无法查找到。

locate有两种更新搜索数据库的方法:

1、系统制定的计划任务,搜索遍历整个根文件系统,来自动完成数据库的更新

2、updatedb命令,手动更新数据库

因此,locate命令适用于非实时的、模糊的、快速查找


locate命令基本用法:

locate [option]...[pattern]...

常用选项:

-h 帮助信息

-i 忽略大小写

-c 统计共有多少符合条件的文件

-b 只显示匹配路径中的基名

-r 支持使用正则表达式来匹配pattern

一般,在Linux中locate命令查找文件,使用较少,多使用find命令,实现实时精确的文件查找。


find命令详解

find查找命令,是通过遍历指定的文件系统,匹配查找模式来完成查找,是实时的、精确查找。

find命令的基本用法:

find [option]...[查找文件路径] [查找条件] [查找后的处理动作]

常用选项:一般使用较少

查找文件路径:查找文件的起始路径,默认是当前工作目录

查找条件:指定的查找标准,可以是文件名、文件的大小、文件的类型、权限、从属关系、时间戳等标准来查找,默认为查找指定路径下的所有文件。

处理动作:对符合条件的文件作出操作,默认为标准输出。

备注:find查找文件,默认是glob文件名通配,而非正则表达元字符通配


查找条件:

-name "pattern" 根据文件名来查找文件

-iname "pattern" 根据文件名查找文件,忽略大小写

实例:

#find /etc -name pass* #在/etc目录下查找文件名以pass开头的文件

#find / -name pass* #在根目录下查找文件名以pass开头的文件

-regex "pattern" 根据正则表达式匹配查找

在find中使用较少,正则表达式工作在贪婪模式下,匹配的是整个路径而非基名


-user username 查找属主为指定用户的文件


-group groupname 查找属组为指定组的文件

-uid UID 查找属主为指定UID的文件

-gid GID 查找属组为指定GID的文件

-nouser 查找没有属主的文件

-nogroup 查找没有属组的文件

组合测试:

与:-a 默认组合逻辑

或:-o

非:-not或!

备注:组合测试时如用括号需转义 \( \)


-type TYPE 根据文件类型查找

f普通文件 d目录 l链接文件 b块设备 c字符设备文件 p管道 s套接字

-size [+|-]#单位 根据文件大小来查找

常用单位:k M G

备注:-size 3M:查找出来的文件是满足小于4M大于2M的范围的文件

-size +3M:查找的是4M及大于4M的文件

-size -3M:查找的是2M及小于2M的文件

根据时间戳查找

以天为单位

-atime [+|-]#

-mtime [+|-]#

-ctime [+|-]#

以分为单位

-amin [+|-]#

-mmin [+|-]#

-cmin [+|-]#

实例:#find /etc -mtime -7 #查找7天内修改过的文件

根据权限查找

-perm [/|-]mode

备注:-perm mode:精确匹配权限位

-perm /mode:任意一类用户(u,g,o)的任何权限位,任何一个符合条件即满足(9个权限位只要有一个满足即可,是或的逻辑关系)

-perm -mode:每一类用户(u,g,o)的权限位(r,w,x)的每一位,同时符合条件即满足(9个权限位之间是与的逻辑关系)

实例:#find /etc -not -perm /222 -type f #查找所有用户都没有写权限的文件

处理动作:

-print 输出至标准输出,默认动作

-ls 类似于对查找到的文件执行"ls -l"命令,输出文件的详细信息

-delete 删除查找到的文件

-fls /path/to/file 把查找到的所有文件的长格式信息保存至指定的文件中

-ok command {} \; 对查找到的每个文件都交给command来执行,每个文件执行都要用户确认

-exec command {} \; 对查找到的每个文件都交给command来执行,不需要用户确认

备注:find查找到的文件路径传给后面的command,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令,但是有些command不能接受过长的参数,此时command执行会失败。另有一种方式可以规避此问题:#find ... | xargs command


0