一、概述
格式:find [path] [expression] [-exec command]
以上介绍并非find命令标准格式,而是根据我自身经验而采用的一种比较常用格式。
二、详解
[path]:该选项是你希望搜索文件的文件夹路径,如果该目录下有子文件夹会自动递归搜索;
[expression]:该选项在find命令的man手册中叫做TESTS,其实就是用来设置你搜索的过滤选项,下面列出的是几个常用选项:
注:+(/-)num :大于(/小于)num;
-name 文件名:按文件名查找,支持通配符;
-iname 文件名:和-name一样,不过文件名忽略大小写;
-user 用户名:根据文件所属用户用户名查找;
-group 组名:根据文件所属组组名查找;
-uid uid:根据文件所属用户uid查找;
-gid gid:根据文件所属组的gid查找;
-a:逻辑连接符(『注』逻辑判断符会从左边往右的判断,对于-a来说,如果左边条件不满足的话就不会执行右边 的条件),表示"和",前后连接两个不同的查找选项,eg. find /tmp -name "*.sh" -a -name "*.so";
-o:逻辑连接符,表示"或",用法同-a;
-not:逻辑连接符,表示“异或”,用法同-a;
-atime(amin) +(/-)n:查找n天(/分钟)之前(/内)访问的文件,eg find /tmp -atime +3;
-mtime(mmin) +(/-)n:查找n天(/分钟)之前(/内)修改的文件,用法同-atime;
-ctime(/cmin) +(/-)n:查找n天(/分钟)之前(/内)创建的文件,用法同-atime;
-type f // 普通文件:按文件类型查找文件;
d //目录文件
l //链接文件
b //块设备文件
c //字符设备文件
p //管道文件
s //socket文件
-size +(/-)n[k,M,G //单位,对应kb,mb,gb]:按文件大小查找;
-perm 数字权限符:按权限查找,eg. find /tmp -perm 744;
-nouser:查找不属于任何用户的文件;
-nogroup:查找不属于任何组的文件;
-path [path] -a -prune -o [其他过滤条件]:在查找时排除path目录,『注意』path后面不能有/;
【可选】
[-exec command]:用于在find查找到相关文件后执行的command,在command的参数中用{}代替查找到的文件,eg. find /tmp -name "*.sh" -exec cp {} ~/{}.bak
三、扩展
1、如果find命令查找到的文件太多,则用-exec处理查找到的文件就会处理不了,这时可以配合xargs命令使用,利用xargs命令里的-n选项来分批处理查找到的文件,eg. find ./temp -name "*.sh" | xargs -n 10 mv {} {}.bak
2、find命令同locate的区别,locate是查找索引数据库,速度更快,但是数据库里的数据不能及时更新,find直接查找文件,速度慢,但是能保证是最新的文件。可以使用updatedb手动更新locate索引数据库。