文件查找类别分:locate、find
local
- 依赖于事先构建的索引,索引构建是在系统较为空闲时自动进行(周期任务),可以手动更新数据库(updatedb),此工作机制类似于whatis(makewhatis)
- 索引构建过程需要遍历整个根文件系统,极消耗资源
- 工作特点
- 查找都快
- 模糊查找(查找内容本身不是文件名,也包括文件路径)
- 非实时查找(原因需要构建索引库)
- 使用方式:locate KEYWORD
find
- 实时查找工具,通过遍历指定路径下的文件系统完成文件查找
- 工作特点
- 查找速度略慢
- 精确查找(查找文件名本身,而不包括路径)
- 实时查找
- 语法
- find [OPTION] [查找路径] [查找条件] [处理动作]
-
查找路径:指定具体目标路径,默认为当前目录
-
查找条件:指定查找标准,可以为文件名、大小、类型、权限等标准;默认为找出指定路径下的所有文件
-
处理动作:对符合条件的文件做什么操作;默认为输出至屏幕
-
查找条件
- 根据文件名查找
- -name "文件名称":支持使用glob
- -iname "文件名称",不区分字母大小写
- -regex "PATTERN": 以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
- 根据属主、属组查找
- -user USERNAME
- -group GROUPNAME
- -uid UserID
- -gid GroupID
- -nouser:查找没有属主的文件
- -nogroup:查找没有属组的文件
- 根据文件类型查找
- type TYPE
- f:普通文件
- d :目录文件
- l:符号链接文件
- s:套接字文件
- b:块设备文件
- c:字符设备文件
- p:管道文件
- type TYPE
- 组合条件
- 与:-a
- 或:-o
- 非:-not,!
- 示例:
- !A -a !B = !(A -o B)
- !A -o !B = !(A -a B)
- 根据文件大小来查找
- size [+|-]#UNIT
- 常用单位:k,M,G
- #UNIT:表示范围:(#-1,#]
- -#UNIT:表示范围:[0,#-1]
- +#UNIT:表示范围:(#,∞)
- size [+|-]#UNIT
- 根据时间戳
- 以天为单位
- -atime [+|-]#
- #:表示范围:[#,#+1)
- -#:表示范围:(0,#)
- +#:表示范围:[#+1,∞)
- -mtime
- -ctime
- -atime [+|-]#
- 以分钟为单位
- -amin
- -mmin
- -cmin
- 以天为单位
- 根据权限查找
- perm [+|-] MODE
- MODE:精确匹配权限
- -MODE:每一类对象都必须同时拥有为其指定的权限标准
- +MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可
- perm [+|-] MODE
- 例子:find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} ;
- 根据文件名查找
-
- 处理动作
- -print:默认处理动作,显示至屏幕
- -ls:类似于对查找到的文件执行"ls -l"命令
- -delete:删除查找到的文件
- -fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中
- -ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;
- 对于每个文件执行命令之前,都会交互式要求用户确认
- -exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
- {}:用于引用查找到的文件名称自身
- 注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令,有些命令不能接受过多参数,此时命令执行可能会失败,另一种方法可规避此问题
- find | xargs COMMAND
- find [OPTION] [查找路径] [查找条件] [处理动作]
xargs 解析:
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如:
这个命令是错误的
find /sbin -perm +700 |ls -l
这样才是正确的
find /sbin -perm +700 |xargs ls -l
xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments 。 因为是以空白字元作为分隔,所以,如果有一些档名或者是其他意义的名词内含有空白字元的时候, xargs 可能就会误判了,如果需要处理特殊字符,需要使用-0参数进行处理。
选项解释 :
-0 :当sdtin含有特殊字元时候,将其当成一般字符,想/'空格等