美文网首页
find命令的prune用法总结

find命令的prune用法总结

作者: wubin1989 | 来源:发表于2020-05-21 10:54 被阅读0次

    最近因为服务器运维的需要在学习linux脚本编程,接触到find命令,看了一些课程和文章,但是总感觉还是没有讲明白prune。
    简单来说,prune的功能就是当遇到某个文件夹的时候,跳过这个文件夹,不进去继续查找。我们下面看例子说。

    ➜  findExample tree .
    .
    ├── folder1
    ├── folder2
    │   ├── sub1
    │   │   └── file1
    │   └── sub2
    │       └── file2
    └── folder3
        └── file3
    
    5 directories, 3 files
    

    这是用来做说明的文件夹结构。如果我们想查找除了folder3这个文件夹之外的其他文件夹里的文件,可以用这样的命令实现:

    ➜  findExample find . -path ./folder3 -prune -o -type f -print
    ./folder2/sub1/file1
    ./folder2/sub2/file2
    

    find后面的第一个英文点号.表示当前根路径,-path ./folder3表示匹配路径为./folder3的文件夹,-prune表示把前面命令所匹配到的路径排除,不再进入该路径下面继续查找,-o表示或,-type f表示查找文件,-print表示打印查找结果到命令行终端。
    有几个需要注意的点:

    • -path后面需要跟绝对路径或者是相对路径,不能只有文件夹名称
    ➜  findExample find . -path folder3 -prune -o -type f -print  
    ./folder2/sub1/file1
    ./folder2/sub2/file2
    ./folder3/file3
    

    这样是错误的。把-path改成-name就对了。

    ➜  findExample find . -name folder3 -prune -o -type f -print
    ./folder2/sub1/file1
    ./folder2/sub2/file2
    
    • -o一开始让我感到很疑惑。它的意思是OR,那就是既匹配了前面的./folder3,又匹配了后面的-type f,可为什么打印出来的没有./folder3呢?原来是因为-print只对离自己最近的一个匹配条件起作用,在这个例子里也就是只打印-o后面的匹配条件所匹配的文件,对-o前面的-path folder3 -prune所匹配的东西不起作用

    find命令是linux系统里很常用的一个命令,可以通过man find命令查看其他参数和用法。有疑问,可以一起探讨。

    相关文章

      网友评论

          本文标题:find命令的prune用法总结

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