linux下find命令的使用小结

来源:互联网 发布:捷易通软件怎么样 编辑:程序博客网 时间:2024/05/21 19:41

linux下find命令的使用小结

对于基于linux的程序开发人员来说,vi,grep,find这几个命令可以说都比较常用,尤其是vi(或者用more,less命令也是类似的)在查看日志,排除程序BUG上有着难以替代的作用。如果日志文件是分散在各个不同的路径下,那么我们一般会使用grep命令:grep -l 你的关键字 . -r,这个命令会递归搜索当前路径下所有文件,简单有效。

也许,你们也可能遇到日志文件非常分散,可能的情况是日志按天归档,多个系统的日志文件散落在不同子目录中。时间一长,日志文件的数量是相当惊人的。如果这时,仍旧直接使用grep递归搜索,可想而知会相当慢。

    # 下面是我需要检索的日志目录结构    ./log/20170407/AB000027/1B0006/P1B0006_D0407_C27_Q0_N10.log

find命令这时的优势就显现出来了,比如要解决上面的日志查找问题,可以键入:

    # 此处用-path选项限定了路径模式,极大地缩小了日志查找范围    find . -type f -path "./log/*/AB*27/1B*/*" -exec grep -l 关键字 {} \;

当然,上面的检索命令仅仅是一个引子,你也可以附加其他限定选项,比如时间,用户,文件大小等。这也在提醒我们:要充分利用find命令的文件筛选能力,加快日志查找速度
比如,我们需要查找最近一个小时内的日志文件,是否有包含keyword关键字:

    find . -type f -mmin -60 -exec grep -l keyword {} \; 

下面补充一些关于find命令的常用选项:
1. 时间

以分钟为单位

-mmin: 文件修改时间,比如要查找半个小时以内(如果是半个小时以外,-30改成+30就好)的文件,find . -mmin -30
-cmin: 文件创建时间
-amin: 文件访问时间

>如果要以天为时间单位,进行筛选,只需换成相应的**mtime/ctime/atime**(修改时间/创建时间/访问时间)>比如我要查找超过30天的文件,键入:find . -mtime +30 


  1. 文件类型

使用-type选项,f(常规文件) d(目录) l(符号链接) c(字符设备) b(块设备)
查找当前路径下的所有目录:find . -type d

  • 文件名
    使用-name选项
    查找当前路径下的所有txt文件:find . -type f -name “*.txt”
  • 最大递归深度
    有时候,我们需要限制查找的递归深度,使用-maxdepth(最大递归深度)/-mindepth(最小递归深度)
    查找递归深度在3以内的文件:find . -type f -maxdepth 3
  • 命令执行
    如果需要在查找到的文件上,执行一定的操作,请使用-exec选项
    就像开始的例子一样:find . -type f -mmin -60 -exec grep -l keyword {} \;
    注意:
    在这个例子中,{}指代符合条件的文件,末尾的\;也是必不可少的。

  • 转载自:http://blog.csdn.net/weixin_37506798/article/details/69802338

    0 0