一、介绍
遍历查找,从根开始从磁盘上查找文件,效率很低,功能强大。
相当于windows里边的“搜索”。
遍历查找,从根开始查找。
语法:
find 查找路径 选项1 【参数1】 选项2 【参数2】 .....
二、用法
(一)按名字查找:点名
-name 按名字查找
(1)按名字查找:
[root@oldboy ~]# find / -name "hosts"
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts
(2)按名字模糊查找 *表示所有
[root@oldboy ~]# find /etc/ -name "h*ts"
/etc/hosts
[root@oldboy ~]# find /etc/ -name "*.conf"
/etc/resolv.conf
/etc/pki/ca-trust/ca-legacy.conf
/etc/yum/pluginconf.d/fastestmirror.conf
/etc/yum/pluginconf.d/langpacks.conf
/etc/yum/protected.d/systemd.conf
(二)按类型查找:-type
Linux一般不按扩展名分文件。
类型包括:f d l c b s
b block (buffered) special 块设备:硬盘光驱
c character (unbuffered) special 字符设备
d directory 查找目录
f regular file 查找文件
l symbolic link 软连接(相当于Win快捷方式)
s socket 和应用程序之间通信有关
[root@oldboy ~]# find / -name "hosts"
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts
查找文件,并且名字为hosts
[root@oldboy ~]# find / -type f -name "hosts"
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts
查找目录,并且名字为hosts
[root@oldboy ~]# find / -type d -name "hosts"
[root@oldboy ~]# mkdir hosts
[root@oldboy ~]# find / -type d -name "hosts"
/root/hosts
(三)组合查找
find默认就是取交集:(-a)and
并集: (-o)or
例:查文件类型为文件,并且名字为hosts
[root@oldboy ~]# find / -type f -a -name "hosts"
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts
[root@oldboy ~]# find / -type f -name "hosts"
/etc/hosts
/tmp/etc/hosts
/opt/etc/hosts
并集:查找名为hosts,或者类型为d,并且为oldboy
find / -name "hosts" -o -type d -name "oldboy"
/etc/hosts
/root/hosts
/tmp/oldboy
/tmp/etc/hosts
/home/oldboy
/opt/oldboy
/opt/etc/hosts
/oldboy
取反:! 查找名字不是file1
[root@oldboy ~]# mkdir / data -p
[root@oldboy ~]# touch /data/file{1..3}
[root@oldboy ~]# find /data -name "file1"
/data/file1
[root@oldboy ~]# find /data ! -name "file1"
/data
/data/file2
/data/file
(四)按大小查找
-size +1M #大于1M
-size 1M #1M
-size -1M #小于1M
其他单位k G
[root@oldboy ~]# find /etc -size +1M
/etc/selinux/targeted/active/policy.kern
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/udev/hwdb.bin
(五)-mtime modify 按修改时间查找
-atime 按【访问 access】时间查找(很少用)
-ctime 按【改变change】时间查找(很少用)
-mtime +7 #7天以前的
-mtime 7 #第7天
-mtime -7 #最近7天
[root@oldboy ~]# find /data -type f -name "file*" -mtime +7
/data/file19
/data/file20
/data/file21
(六)-perm 按权限(了解)
[root@oldboy data]# mkdir oldboydir
[root@oldboy data]# find /data -perm 755
/data
/data/oldboydir
(七)-user 按用户(了解)
[root@oldboy data]# chown oldboy oldboydir
[root@oldboy data]# find /data -user oldboy
/data/oldboydir
三、对找到的东西进行处理
1. -exec 执行动作
find /data -name "file*" -mtime +7 -exec rm -f {} \;
原理:一个一个删,效率低
rm -f /data/file01
rm -f /data/file02
rm -f /data/file03
.....
2. xargs 分组
-n 分组
[root@oldboy data]# seq 10 >oldboy.txt
[root@oldboy data]# xargs -n 3 <oldboy.txt
1 2 3
4 5 6
7 8 9
10
-i 可以让后面的{}接收搜索到的内容
find /data -name "file*" -mtime +7|xargs rm -f #简写
find /data -name "file*" -mtime +7|xargs -i rm -f {} #完整写法
原理:一起删,效率更高
rm -f file01 file02 ...file30 #一条命令
[root@oldboy ~]# find /data -name "file*" -mtime -7|xargs rm -f
[root@oldboy ~]# ls /data
file23
误区:不加xargs