find命令的基本信息如下。
命令名称:find。
英文原意:search for files in a directory hierarchy。
所在路径:/bin/find。
执行权限:所有用户。
功能:在目录中搜索文件
1、按照文件名搜索
[root@localhost ~]# find 搜索路径[选项] 搜索内容
选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小写
-inum: 按照inode号搜索
2、按照文件大小搜索
-size [+|-]大小: 按照指定大小搜索文件
这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件。
find命令的单位:
-size n[cwbkMG]
File uses n units of space. The following suffixes can be used:
'b' for 512-byte blocks (this is the default if no suffix is used)
#这是默认单位,如果单位为b或不写单位,则按照512 Byte搜索
'c' for bytes
#搜索单位是c,按照字节搜索
'w' for two-byte words
#搜索单位是w,按照双字节(中文)搜索
'k' for Kilobytes (units of 1024 bytes)
#按照KB单位搜索,必须是小写的k
'M' for Megabytes (units of 1048576 bytes)
#按照MB单位搜索,必须是大写的M
'G' for Gigabytes (units of 1073741824 bytes)
#按照GB单位搜索,必须是大写的G
3、按照修改时间搜索
Linux中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个时间,我们也可以按照时间来搜索文件。
[root@localhost ~]# find 搜索路径[选项] 搜索内容
选项:
-atime [+|-]时间: 按照文件访问时间搜索
-mtime [+|-]时间: 按照文件数据修改时间搜索
-ctime [+|-]时间: 按照文件状态修改时间搜索
这三个时间的区别我们在stat命令中已经解释过了,这里用mtime数据修改时间来举例,重点说说“[+-]”时间的含义。
-5:代表5天内修改的文件。
5:代表前5~6天那一天修改的文件。
+5:代表6天前修改的文件。
我们画一个时间轴,来解释一下,如图4-6所示。
4、 按照权限搜索
命令格式。
[root@localhost ~]# find 搜索路径[选项] 搜索内容
选项:
-perm 权限模式: 查找文件权限刚好等于“权限模式”的文件
-perm -权限模式: 查找文件权限全部包含“权限模式”的文件
-perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件
5、按照所有者和所属组搜索
[root@localhost ~]# find 搜索路径[选项] 搜索内容
选项:
-uid 用户ID: 按照用户ID查找所有者是指定ID的文件
-gid 组ID: 按照用户组ID查找所属组是指定ID的文件
-user 用户名: 按照用户名查找所有者是指定用户的文件
-group 组名: 按照组名查找所属组是指定用户组的文件
-nouser: 查找没有所有者的文件
按照所有者和所属组搜索时,“-nouser”选项比较常用,主要用于查找垃圾文件。
只有一种情况例外,那就是外来文件。比如光盘和U盘中的文件如果是由Windows复制的,在Linux中查看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者
6、按照文件类型搜索
[root@localhost ~]# find 搜索路径[选项] 搜索内容
选项:
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软链接文件
7、逻辑运算符
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-a: and逻辑与
-o: or逻辑或
-not: not逻辑非
1)-a:and逻辑与
find命令也支持逻辑运算符选项,其中-a代表逻辑与运算,也就是-a的两个条件都成立,find搜索的结果才成立。举个例子:
[root@localhost ~]# find . -size +2k -a -type f
#在当前目录下搜索大于2KB,并且文件类型是普通文件的文件
2)-o:or逻辑或
-o选项代表逻辑或运算,也就是-o的两个条件只要其中一个成立,find命令就可以找到结果。例如:
[root@localhost ~]# find . -name cangls -o -name bols
./cangls
./bols
#在当前目录下搜索文件名要么是cangls的文件,要么是bols的文件
3)-not:not逻辑非
-not是逻辑非,也就是取反的意思。举个例子:
[root@localhost ~]# find . -not -name cangls
#在当前目录下搜索文件名不是cangls的文件
8、其他选项
1)-exec选项
这里我们主要讲解两个选项“-exec”和“-ok”,这两个选项的基本作用非常相似。我们先来看看“-exec”选项的格式。
[root@localhost ~]# find 搜索路径[选项] 搜索内容-exec 命令2 {} \;
其次,这个选项的作用其实是把find命令的结果交给由“-exec”调用的命令2来处理。“{}”就代表find命令的查找结果。
2)-ok选项
“-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令2会直接处理,而不询问;“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行
注:在 exec 和ok后面不能跟别名命令,如:ll 只以写ls -l
如: find / -name "*.conf" -exec ls -l {} \;
find也是搜索命令,那么find命令和grep命令有什么区别呢?
find命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配,通配符是完全匹配
例:
删除 tmp下以.conf结尾的文件
find /tmp -name "*.conf" -exec rm {} \; #没有交互提示,直接删除
find /tmp -name "*.conf" -ok rm {} \; #有交互提示,需确认才能删除
复制根目录上的所有以.service结尾的文件到/tmp/test下
find / -name "*.service" -exec cp {} /tmp/test \;