find命令的基本语法格式:
find [options] [查找路径] [查找条件] [处理动作]
查找路径:默认为当前目录
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示
常用查找条件:
-name glob_expr 根据文件名查找,支持glob通配符:?, *, [], [^]
-name glob_expr 根据文件名查找,但不区分字符大小写。
-user username 根据用户名查找
-group groupname 根据用户组名称查找
-uid UID 根据用户的UID查找
-gid GID 根据用户的GID查找
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
-type TYPE 根据文件类型查找。主要文件类型:f, d, l, b, c, s, p
-size [+|-]SIZE 根据文件的大小查找。常用单位:k, M, G
+SIZE : 表示匹配 x > SIZE 单位大小的文件。例:find –size +5k, 查找当前目录下文件大小大于5k的文件。
-SIZE : 表示匹配 x <= (SIZE - 1) 单位大小的文件。例:find –size -5k, 查找当前目录下文件大小小于等于4k的文件。
SIZE : 表示匹配 (SIZE – 1) < x <= SIZE 单位大小的文件。例:find –size 5k, 查找当前目录下文件大小处于4k和5k之间的文件。
根据时间戳查找(以现在向过去方面为时间轴):
以天为单位(time):
-atime [+|-]num 根据过去的访问时间查找
-mtime [+|-]num 根据过去的修改时间查找
-ctime [+|-]num 根据过去的改变时间查找
以分钟为单位(minute):
-amin [+|-]num 根据过去的访问时间查找
-mmin [+|-]num 根据过去的修改时间查找
-cmin [+|-]num 根据过去的改变时间查找
其中, + :表示过去(num + 1)单位时间之前
- : 表示过去num单位时间到现在
无符号 : 表示过去 (num + 1) > x >= num 单位时间段
根据权限查找:
-perm [+|-]MODE
MODE : 精确匹配
+MODE : 匹配任何一类用户的任何一位权限。当某类用户的的MODE位为’0’时,表示不检查该类用户的权限。例: –perm +001,匹配其它类用户有执行权限的文件。不检查文件的属主和属组权限,因为对应的MODE位为’0’。
-MODE : 匹配每类用户的权限子集。例: –perm -555,匹配属主,属组和其它类用户都具有读和执行权限的文件。那么MODE为555,755,775,777的文件都匹配。
处理动作
-print 默认动作,将查找到的结果打印在标准输出上。
-ls 以长格式输出查找到的所有文件。
-exec COMMAND {} \; 对查找到的所有文件执行COMMAND命令,其中’{}’是命令参数占位符。find命令把查找到的所有文件一次性地传递给 –exec 所指定的命令,但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现 溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。因此,在某些情况下,可以通过 find | xargs COMMAND 的方式来代替 –exec COMMAND 的方式避免这种问题。因为find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
例:
find –perm –003 –a –type f –exec chmod o-wx {} \;
find –perm –003 –a –type f | xargs chmod o-wx
有些情况必须利用占位符才能完成的,就无法用xargs的方式实现了。例:
find –name “*.doc” –exec mv {} {}x \; 将当期目录下查找到的所有以后缀”.doc”结尾的文件,改变为以后缀”.docx”结尾。
-ok COMMAND {} \; 以交换的方式,对查找到的所有文件执行COMMAND命令。