介绍
find工作中常用的Linux基础命令之一,可以按照类型、大小、名字、修改时间、访问时间、改变时间、权限等参数进行查找我们想要的文件或目录。find查找还可以结合很多命令来达到我们想要的结果,比如:和sed、xargs等命令连用;通过管道符号“|”即可。
我们在学习和使用Linux命令和配置文件的时候,要学会用man来帮助学习,man不仅可以查看命令的帮助文档,还能查看配置文件的帮助文档。
find - search for files in a directory hierarchy
在目录层次结构中搜索文件
语法
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
查找方式
1、查找的深度(-maxdepth)
该参数一定要跟在路径后面,其它参数的前面,否则会报错

find /var/log/ -maxdepth 1 -type f            
/var/log/anaconda.ifcfg.log
/var/log/dmesg
/var/log/dmesg.old

2、按类型查找(-type)
find /data -type f
f:普通文件 d:目录 l:符号链接 s:socket b:区块文件
3、按文件名查找(-name)
find /data -type f –name “*.log”
4、按修改时间查找(-mtime)
find / -type f –name “*.log” –mtime +4 表示查找四天前的
时间原理图:
Linux命令之find详解
在时间属性当中,除了按照修改时间mtime之外,还可以按照访问时间atime和属性的改变时间ctime来查找,只不过不太常用。
5、按权限查找(-perm)

[root@backup tmp]# find /tmp/ -type f -perm 644 
/tmp/rsyncd.conf
/tmp/nn
/tmp/kk
[root@backup tmp]# ls -l
total 4
-rw-r--r-- 1 root root   0 May 18 21:01 kk
-rw-r--r-- 1 root root   0 May 18 21:02 nn
-rw-r--r-- 1 root root 466 May 17 05:32 rsyncd.conf
[root@backup tmp]# ls -l kk|awk '{print $1}'|tr "\-rwx" "0421" –有特殊意义,所以需要转义
0420400400

6、按用户查找(-user)
find / -user root
7、按大小查找(-size)

find / -type f –size +100M 查找大于100M的文件
-100M 小于100M
100M 等于100M
+100M 大于100M    其它的依此类推

8、按照inode号查找(-inum)
find / -type f –inum xxxx
9、! :取反
find . -maxdepth 1 -type d ! -name "."
10、-a:并且and

find /tmp/ -type f -name "k*" -a -name "*k"
/tmp/kk

11、-o:或者or

find /tmp/ -type f -name "k*" -o -name "*n" 
/tmp/nn
/tmp/kk

使用案例
1、find . -perm 700 |xargs chmod 777
查找出当前目录(及子目录)下所有权限为700的文件,并把其权限重设为777。
2、find . -type f |xargs ls -l
查找出文件并查看其详细信息。
3、find . -maxdepth 1 -type d ! -name "."
查找当前目录下的所有目录,排除”.”当前目录,且查找深度为1
4、find oldboy/ -type f -name "*.sh"|xargs sed -i 's#Ricky#ricky#g'

5、查找删除
find /data -type f -name "*.txt" |xargs rm –f
或find /data -type f -name "test" -exec rm {} \;
{}:find查找到的内容
; 命令结束【\反斜杠是用来转义】