最近因为服务器运维的需要在学习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命令查看其他参数和用法。有疑问,可以一起探讨。











网友评论