find命令

来源:互联网 发布:魅蓝note6网络 编辑:程序博客网 时间:2024/05/16 07:58

简介

find命令用于在指定的目录层次结构中搜索指定的文件。它的功能多样且强大,也因此导致它的相关命令较多,学习起来相对较难。
1、命令格式

find [选项] [搜索范围] [搜索条件] [操作]

2、搜索条件
find的搜索条件有很多,这里介绍一些常用的。
1)、根据文件名查找
-name pattern:根据文件名进行查找(精确查找,区分大小写,只有与所给文件名完全相同的文件才会被列出),假设当前目录有两个文件,a和ab:

find ./ -name a#结果为a,不显示ab。

如果想要进行模糊查找,可以使用linux中的通配符(’*’,’?’,’[]’),注意在使用通配符时要使用引号将条件包含起来。例如:

find ./ -name 'a*'#结果包含了文件a和文件ab

-iname pattern:根据文件名查找,与“-name”类似,不过它是大小写无关的。假设当前目录还有一个文件A:

find ./ -iname a结果包含文件aA

2)、根据文件所属用户或用户组来查找
-uid n:根据用户的ID(数字)来进行匹配
-user uname:根据用户名来进行匹配

find ./ -uid 1000find ./ -user marrow

-gid n:根据所属组ID进行匹配
-group gname:根据所属组的名字来进行匹配

find ./ -gid 1000find ./ -group marrow

3)、根据文件的时间戳属性来进行匹配,对于一些数值参数条件可以使用下面的三种类型的数值(它们都表示过去的时间)进行指定:

数值 范围 +n 表示超过n -n 表示小于n n 表示正好在n

-amin n:根据文件的访问时间(单位分钟)进行查找。
-atime n:根据文件的访问时间(单位天)进行查找,需要注意的是,当查找的文件的最后一次访问时间距今的时间不是24小时的整数倍时,余数会被舍去,比如一个文件的上次访问时间距今28个小时,但是find命令会把它当做24小时前,因此在使用“-atime +1”进行匹配时,被匹配的文件的上一次访问时间至少要是两天前被访问的。

//表示上一次访问时间在10分钟之前的文件find ./ -amin +10//表示上一次访问时间距离现在刚好10分钟find ./ -amin 10//表示上一次访问时间距今的时间小于10分钟find ./ -amin -10

-cmin n:根据文件属性改变时间(单文分钟)进行查找。
-ctime n:与-atime类似,只是按照文件属性改变时间。

4)、根据文件的大小进行匹配
-size n[bcwkMG]:根据文件大小(四舍五入)匹配,可以指定单位(默认单位数据块,为一个扇区(512K))。

单位 大小 ‘b’ 表示大小为512个字节的数据块(默认) ‘c’ 字节 ‘w’ 宽字节 ‘k’ KB,即1024个字节 ‘M’ MB,即1048576个字节 ‘G’ GB,即1073741824个字节

其中n也可以采用“+n,-n,n”这三种形式。
5)、根据文件类型匹配
-type c:根据文件类型进行匹配

单位 大小 ‘b’ 块设备文件 ‘c’ 字符设备文件 ‘d’ 目录文件 ‘p’ 管道(FIFO)文件 ‘f’ 普通文件 ‘l’ 符号链接文件,如果设定了-L选项,则无效 ’s’ 套接字文件 ‘D’ door(Solaris系统才有的文件类型)

6)、根据文件权限匹配
-perm mode:匹配文件的权限与所给mode(十进制或符号)相同。

//表示匹配权限为755的文件find ./ -perm 755

-perm /mode:表示只要有一类用户(属主,属组,其他)中的一个具有mode权限即可。

//表示匹配(属主,属组,其他)任意一个具有写权限即可find ./ -perm -mode 222

-perm -mode:表示必须所有类型用户都具有mode权限才匹配。
7)、复合条件(-a,-o,-not)
-a:表示连接的条件都要满足
-o:表示连接的条件满足任意一个,如果左边条件满足,则不会去考虑右边条件
-not:表示对条件结果取反

find ./ -name '*.sh' -a -user root

2、搜索范围
搜索指定目录下的所有符合条件的文件,当指定多个目录时,需要用空格分开。例如:

find /usr/include /usr 搜索条件

3、操作
在查找完成后,可以对查询结果进行操作。
-delete:删除匹配的文件,如果失败,会有提示信息并且终止,返回状态值非0。记住,不要将-delete放置在find命令的第一个位置,因为find命令本身也是一个表达式,所以如果将-delete放在第一个位置,find命令会试着去删除任何你指定的起始位置下的东西。例如:

//命令执行时会试着删除当前目录下的所有东西,不会理睬后面的匹配条件find -delete -name a

-ls:对查询结果执行“ls -dils”。
-fls file:与-ls相似,并将结果输出到文件file中(即使没有任何文件匹配,也会创建文件)。
-fprint file:将查询到的完整文件的全路径打印到file,如果file不存在,则创建它,如果已存在则会覆盖(截断)它。
-exec command:执行command指定的命令,如果返回状态为0表示成功,command中,字符串’{}’表示查找到的文件,command的参数以字符;结尾,需要加上反斜杠进行转义。

对查询结果执行ls -l命令find ./ -inam 'a' -exec ls -l {} \;

-exec command {} +:它是-exec command的变种,对指定的文件执行命令command。但是它将{}(查询结果)参数放在了command的尾部来构成命令。命令的总调用次数要少于匹配的文件个数(因为它将结果都放在一行中作为command的参数进行执行)。

0 0
原创粉丝点击