find命令有很多选项或表达式,每一个选项前面跟随一个横杠-,让我们先来看一下该命令的主要选项,然后再给出一些例子。

 
find [路径] [查找条件] [处理动作]
查找条件:
        -name    精确查找文件并区分大小写 
-iname   查找文件的时候不区分大小写 
-user    用户名 表示根据属主名来查找文件
-group   组名   表示根据属组名来查找文件
-uid     查找用户UID文件
-gid    查找用户GID文件
-nouser  查找没有属主文件 
-nogroup 查找没有属组的文件 
 
-name 
在/etc目录下查找a.txt这个文件
find /etc -name a.txt
-iname
在/etc目录下查找a.txt和A.txt文件
find /etc -iname A.txt
注意:此时不管你是查找a.txt和A.txt两个都会显示出来
 
-user
在/etc目录下查找属主为redhat的文件
find /etc -user redhat
 
-group
在/etc目录下查找属组为test的文件
find /etc -group test
 
-uid
在/etc目录下查找uid为502的文件
find /etc -uid 502
 
-gid
在/etc目录下查找gid为502的文件
find . -gid 502
 
-nouser
在/root目录下查找没有属主的文件
[root@bogon ~]# ll test.txt
-rw-r--r-- 1 redhat redhat     0 Jun  5 21:43 test.txt  /查看test.txt文件的属主和属组为redhat/
[root@bogon ~]# userdel -r redhat   /把redhat这个用户删除,这样属主和属组变成uid和gid了/
[root@bogon ~]# ll
-rw-r--r-- 1  502  502     0 Jun  5 21:43 test.txt
[root@bogon ~]# find /root -nouser 
./test.txt
 
-nogroup
在/root目录下查找没有属组的文件跟上面一样,相信你会操作了吧
[root@bogon ~]# find /root -nogroup 
 
多条件查找,条件间逻辑关系:
并:-a 表示两个都满足的时候才显示
或:-o 表示一个满足的时候都显示出来
非:!,-not
 
-a
在/tmp目录下查找以passwd开头和结局的文件并且属主是redhat的文件
[root@bogon tmp]# ll
-rw-r--r-- 1 root root 1621 Jun  4 15:10 buildscript
-rwx------ 1 root root 3254 Jun  4 23:06 ks-script-_RvIMn
-rw-r--r-- 1 root root  268 Jun  4 15:10 ks-script-_RvIMn.log
[root@bogon tmp]# useradd redhat
[root@bogon tmp]# su - redhat
[redhat@linux ~]$ cd /tmp/
[redhat@linux tmp]$ touch apasswdb
[redhat@linux tmp]$ touch test.txt
[redhat@linux tmp]$ exit
logout
[root@bogon tmp]# ll
total 32
-rw-rw-r-- 1 redhat redhat    0 Jun  5 22:42 apasswdb
-rw-r--r-- 1 root   root   1621 Jun  4 15:10 buildscript
-rwx------ 1 root   root   3254 Jun  4 23:06 ks-script-_RvIMn
-rw-r--r-- 1 root   root    268 Jun  4 15:10 ks-script-_RvIMn.log
-rw-rw-r-- 1 redhat redhat    0 Jun  5 22:42 test.txt
[root@bogon tmp]# find /tmp -name "*passwd*" -a -user redhat
/tmp/apasswdb
[root@bogon tmp]# find /tmp -name "*passwd*" -o -user redhat
/tmp/apasswdb
/tmp/test.txt
 
-o
在/tmp目录下查找以passwd开头和结尾的文件或者属主是redhat的文件
[root@bogon tmp]# find /tmp -name "*passwd*" -o -user redhat
 
 
 
!,not
在/tmp目录下查找不是以passwd开头和结尾的文件或者是属主不是redhat的文件
[root@bogon tmp]# find /tmp -not -name "*passwd*" -o -not -user redhat
 
在/tmp目录下查找不是以passwd开头和结尾的文件并且属主不是redhat的文件
[root@bogon tmp]# find /tmp -not \( -name "*passwd*" -a  -user redhat \)
注意:上面两个例子的结果是一样的,除了apasswdb这个文件不显示,其他都显示,\表示转义
 
 
 
文件类型查找:
 
-type 
 f 普通文件 
 d 目录 
 l 符号链接文件
 b 块设备文件
 c 字符设备文件
 p 管道文件
 s socket文件
 
f
在/root目录下查找普通文件
find /root/ -type f
注意:f前面不要加-
 
d
在/root目录下查找目录
find /root -type d
 
l
在/root目录下查找符号链接文件
find /root -type l
 
......就不一一举例了
 
大小:
 -size [+/-]大小查找 ,不指定的话是字节          
  k find /etc -size +1K 表示查找大于1K的文件
  M 
    find /etc -size +2M  表示查找大于2M的文件
    find /etc -size -2M  表示查找小于2M的文件
    find /etc -size 2M   表示0.8M 1M都不显示,1.1M就满足条件了并且显示
  G find / -size +1G     表示查找大于1G的文件
 
 
 
 
天:
  -atime [+/-] 表示访问时间
  -mtime [+/-] 表示修改内容的时间 
  -ctime [+/-] 表示关于文件权限,属主的时间
 
       
         
             
                    
4
                 
<--->
     <-----------+4  
-4---------------->
     <----|---|---|---|---|---|---|---现在
 7   6   5   4   3   2   1
+4表示大于等于5天前的文件名 find / -mtime +4
-4表示小于等于4天内的文件名 fine / -mtime -4
4 表示4-5那一天修改的文件名 find /  mtime  4 
 
例子:
查找/var目录下
4天内被改动的过的文件名
find /var -mtime -4
 
查找/var目录下
第4天被改动过的文件名
find /var -mtime 4
 
查找/var目录下
4天以前被改过的文件名
find /var -mtime +4
 
 
分钟:
  -amin [+/-]
  -mmin [+/-]
  -cmin [+/-]
 
 
补充知识点:
-newer 用在分辨两个文件之间的新旧关系 
例子:查找/etc下面的文件,如果文件日期比/etc/passwd的新就列出
find /etc -newer /etc/passwd
 
 
按权限查找:
  -perm 
mode :表示精确匹配
/mode: 表示任何一位匹配
-mode: 表示所有都得匹配
 
在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
find . -perm  755 -print
 
 
处理动作:
   -print 命令,将结果打印在屏幕,这个操作是默认操作
   -ls    命令,以ls命令详细显示
   -ok    命令 {} \;   表示执行命令提示 
   -exec  命令 {} \;   表示执行命令不提示
 
-print 
查找/var目录下4天内被改动的过的文件名
find /var -mtime -4 -print 
find /var -mtime -4
注意:查找的结果是一样的,-print是默认操作
 
-ls
查找/var目录下4天内被改动的过的文件名,以ls命令详细显示权限,大小,时间等等
find /var -mtime -4 -ls
 
-ok
查找/var目录下4天内被改动的过的文件名并删除,不过这个命令会提示你, 一个一个删除
find /var -mtime -4 -ok rm  {} \;
 
-exec
查找/var目录下4天内被改动的过的文件名,以详细信息显示,不只是显示权限,大小,时间等等,还可以处理动作,
比如改变属主,删除文件等,这里为了理解只是简单例子
find /var -mtime -4 -exec  ls -lh  {} \;
 
 
总结:find的命令非常实用,还可以配置
xargs 执行额外的命令,通过管道,总之掌握好find你工作会轻松很多