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