强大的find命令

作者: 寂寞的原子 | 来源:发表于2017-05-24 01:37 被阅读39次

    作为一个命令行重度用户,强大的命令行搜索功能是必不可少的。这里介绍一下系统自带的find命令,最近结合fzf使用感觉棒棒哒。

    find

    find的用法如下:

    $ find [<options>] <paths> [<expressions>]
    

    <options>是一些可选的配置,具体参见文档。
    <paths>是搜索的范围,可以有多个目录。
    <expressions>是表达式,可以有多个,下面具体说说这些表达式。

    每一个表达式都可以由一些条件一个操作组成,每个条件都有一个返回值,通过逻辑运算符连接,如果省略逻辑运算符,则相当于AND运算。

    一些常用的条件:

    • -type:限定搜索对象的类型
      • -type f:普通文件
      • -type d:目录
    • -name-iname:匹配项目名字,-iname不区分大小写
      • -name hello:完全匹配
      • -name *hello*:使用通配符
    • -path-ipath: 匹配项目绝对路径,-ipath不区分大小写
      • -path /home/gerald/file:完全匹配
      • -path *hello*:使用通配符
    • -prune:剪枝
      参考 Stack Overflow
      这个操作使find不再搜索匹配到的文件夹的内容,起到剪枝的作用。始终返回true,因此如果使用OR运算,后续表达式将不再执行,就起到了过滤匹配到的项目的作用。

    一些常用的操作:

    • -print:将结果输出到stdout,返回true
      如果没有指定操作,则默认使用-print

    一些栗子:

    • 列出当前目录下所有文件
      $ find . -type f
      $ find . -type f -print
      
    • 匹配文件名字
      $ find . -type f -name foobar
      $ find . -type f -name foobar -print
      
    • 剪枝
      $ find . -name foobar -prune
      $ find . -name foobar -prune -print
      
      匹配名字是foobar的项目,如果是文件夹,则不再继续搜索子文件夹。
    • 过滤
      $ find . -name foobar -prune -o -print
      
      匹配名字是foobar的项目,由于有OR操作,匹配结果将被丢弃,不匹配的结果继续执行,因此最终得到的是名字不为foobar的项目。
      $ find . -name foobar -prune -o -name foo* -print
      
      在剩下的结果中匹配foo开头的项目。如果省略-print,则相当于最外层应用-print,如下:
      $ find . \( -name foobar -prune -o -name foo* \) -print
      
      这时名字是foobar的项目也会包括进去,只是剪枝依然有效。

    相关文章

      网友评论

        本文标题:强大的find命令

        本文链接:https://www.haomeiwen.com/subject/xucnxxtx.html