find命令的prune用法总结

最近因为服务器运维的需要在学习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用法总结)