find 基于路径查找。如果使用find命令,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查到的子目录和文件全部进行显示。
语法:find [查找路径] [查找条件] [对查找完后对查找的结果做一些处理]
[查找条件]:
1)-name --基于文件名查找
例子:
例1、查找/目录下,名字为“ifcfg-eth0”的文件
[root@oldboyedu ~]# find / -name "ifcfg-eth0"
例2、查找/etc目录下,名字后缀为“.conf”的文件
[root@oldboyedu ~]# find /etc -name "*.conf"
2)-type b/c/d/p/f/l/s --基于类型查找
b --块设备(硬盘)
c --字符型设备
d --目录文件
p --管道设备
f --普通文件
l --符号链接
s --套接字类型
例子:
例1、查找/etc目录下的普通文件
[root@oldboyedu ~]# find /etc -type f
例2、查找/目录下的目录文件
[root@oldboyedu ~]# find /oldboy -type d
例3、查找/var/目录下的管道文件
[root@oldboyedu ~]# find /var -type p
例4、查找/dev目录下的块设备文件
[root@oldboyedu ~]# find /dev -type b
例5、查找/dev目录下的字符设备文件
[root@oldboyedu ~]# find /dev -type c
例6、查找/usr/sbin目录下的链接文件
[root@oldboyedu ~]# find /usr/sbin -type l
例7、查找/var/run目录下的套接字文件
[root@oldboyedu ~]# find /var/run -type s
3)-user -group --基于用户和组
例子:
例1、查找/home目录下,拥有者为oldboy的文件
[root@oldboyedu ~]# find /home/ -user oldboy /home/oldboy /home/oldboy/tools /home/oldboy/.bash_history /home/oldboy/.bash_logout /home/oldboy/.bash_profile /home/oldboy/.bashrc
例2、查找/home目录下,所属组为oldboy的文件
[root@oldboyedu ~]# find /home/ -group oldboy /home/oldboy /home/oldboy/tools /home/oldboy/.bash_history /home/oldboy/.bash_logout /home/oldboy/.bash_profile /home/oldboy/.bashrc
4)按时间查找:
①以天为单位
-atime n
-ctime n
-mtime n
②以分钟为单位
-amin n
-cmin n
-mmin n
n为数字,n前可以有+或者-号:
+n:n+1天前
n:n到n+1天之间
-n:n天以内
文件的时间:
atime:访问时间,cat more less
ctime:文件的属性发生变化的时间,比如:权限 所有者大小
mtime:文件的内容发生变化的时间
例子:
例1、查找/oldboy目录下,24小时内被修改的文件
[root@oldboyedu ~]# find /oldboy -mtime 0
例2、查找/oldboy目录下,48小时内被修改的文件
[root@oldboyedu ~]# find /oldboy -mtime -2
例3、查找/oldboy目录下,72小时以前被修改的文件
[root@oldboyedu ~]# find /oldboy -mtime +2
例4、查找/oldboy目录下,5分钟以内被修改的文件
[root@oldboyedu ~]# find /oldboy -mmin -5
5)-perm --基于权限查找
①精确查找
例1、查找/oldboy目录下,所属组权限只有r权限的文件
[root@oldboyedu ~]# find /oldboy -perm g=r
②模糊查找
例1、查找/oldboy目录下,任意权限上有x权限
[root@oldboyedu ~]# find /oldboy -perm +111
例2、查找/oldboy目录下,保证每个权限位上有x的文件
[root@oldboyedu ~]# find /oldboy -perm -111
当权限值只有一个有效值的时候,+和-结果是一样的(如:+100 -100)
6)-size 基于文件的大小查找(c:字节 k:千字节 M:兆字节 G:GB字节)
①精确查找:
例1、查找/oldboy目录下文件大小,等于4M的文件
[root@oldboyedu ~]# find /oldboy -size 4M
②模糊查找:
例1、查找/oldboy目录下,文件大小,大于3M的文件
[root@oldboyedu ~]# find /oldboy -size +3M
例2、查找/oldboy目录下,文件大小,小于3M的文件
[root@oldboyedu ~]# find /oldboy -size -3M
7)基于多条件查找:
-and (-a) 与
-o 或
-not (!) 非
例子:
例1、查找/oldboy目录下,文件大小小于3M和大于1M的文件
[root@oldboyedu ~]# find /oldboy -size -3M -a -size +1M
例2、查找/oldboy目录下,文件大小等于3M或者大小等于4M的文件
[root@oldboyedu ~]# find /oldboy -size 3M -o -size 4M
例3、查找/oldboy目录下,文件大小小于3M并且所属组不是root的文件
[root@oldboyedu ~]# find /oldboy -size -3M -not -group root
[对查找完后对查找的结果做一些处理]:
1)-exec command {} \; --将查到的文件执行command操作,“{}” 表示当前find查找出来的内容,“\;”表示结束,“{}” 和“\;”之间有空格
例子:
例1.查找/oldboy目录下,名字后缀为“.txt”的普通文件,并且删除
[root@oldboyedu ~]#ls -l /oldboy/ -- -l 以长格式显示文件信息,下面的显示开头是“d”的表示目录,开头是“-”的表示文件 total 8 drwxr-xr-x 2 root root 4096 Aug 12 12:25 abc drwxr-xr-x 2 root root 4096 Aug 12 13:20 data -rw-r--r-- 1 root root 0 Aug 12 14:26 file1.txt -rw-r--r-- 1 root root 0 Aug 12 14:26 file2.txt -rw-r--r-- 1 root root 0 Aug 12 14:26 file3.txt -rw-r--r-- 1 root root 0 Aug 12 14:26 file4.txt -rw-r--r-- 1 root root 0 Aug 12 14:26 file5.txt [root@oldboyedu ~]# find /oldboy -name "*.txt" -type f -exec rm{} \; [root@oldboyedu ~]# ls -l /oldboy/ total 8 drwxr-xr-x 2 root root 4096 Aug 12 12:25abc drwxr-xr-x 2 root root 4096 Aug 12 13:20data
2)管道符加xargs命令(|xargs)
例子:
例1.查找/oldboy目录下,名字后缀为“.txt”的普通文件,并且删除
[root@oldboyedu ~]# find /oldboy -name "*.txt" -type f|xargs rm -f [root@oldboyedu ~]# ls -l /oldboy/ total 8 drwxr-xr-x 2 root root 4096 Aug 12 12:25abc drwxr-xr-x 2 root root 4096 Aug 12 13:20data
提示:
find命令自带的参数-exec和系统命令xargs命令有什么区别?
-exec和xargs都做了相同的工作,结果也是相同的,但是二者在执行的过程中是有区别的:
-exec
1)参数是一个一个传递的,传递一个参数执行一次rm
2)文件名有空格等特殊字符也能处理
xargs
1)一次将参数传给命令
2)处理特殊文件名需要采用如下方式:find /oldboy -name "*.txt"|xargs -i rm {}
例子:
例1、查找/oldboy目录下,名字后缀是“.txt”的普通文件,并用echo输出文件名,xargs、xargs -i、-exec对比。
[root@oldboyedu ~]# find /oldboy -name "*.txt" -type f|xargs echo /oldboy/file3.txt /oldboy/file1.txt /oldboy/file2.txt/oldboy/file5.txt /oldboy/file4.txt [root@oldboyedu oldboy]# find /oldboy -name "*.txt" -type f|xargs -i echo {} /oldboy/file3.txt /oldboy/file1.txt /oldboy/file2.txt /oldboy/file5.txt /oldboy/file4.txt [root@oldboyedu ~]# find /oldboy -name "*.txt" -type f -exec echo {} \; /oldboy/file3.txt /oldboy/file1.txt /oldboy/file2.txt /oldboy/file5.txt /oldboy/file4.txt
日常工作中推荐使用xargs,高效,减少磁盘IO!