写在前面
对于玩linux的人来说,目录搜索和文件定位是必不可少需要掌握的技能,那么自然而然对find命令就不会陌生。但是呢,我发现绝大多数的人(包括我在内)由于对它缺乏更深的了解,因此并不能高效地使用它,充其量会个find path -name pattern(即通过文件名搜索定位文件)。其实呢,find命令提供了很多功能,如果能够花点时间去学习掌握,势必会大大增加工作的效率。
有一点需要注意,那就是find命令相对其它命令来说是稍微有那么一点复杂的。复杂在哪呢? 如果你去查看find的man手册,肯定会看到它里面有个表达式(expression)的概念(学过程序设计的人一定对编程语言里的表达式概念不会陌生,而find命令里的表达式概念与编程语言里的表达式概念是非常相像的。关于编程语言里的表达式概念可以参考我的一篇关于C语言表达式的博文《C语言基本概念之表达式》),我认为对这个表达式的了解程度是判断一个人对find命令熟练与否的标志。
find命令格式
先来整体把握一下find命令的格式。一图胜千言,如下:

find命令工作机制
简述find命令工作机制是这样的:沿着PATH指定的文件层次结构向下遍历,匹配符合expression中tests指定的条件的文件,并对其执行expression中指定的actions。 其中PATH我们可以一次性连续给出多个路径,find命令在遍历搜索完一个路径之后,会继续搜索遍历下一个路径。也可以省略PATH,此时PATH的默认值是“.”,即当前目录。
EXPRESSION
文章一开始就说了,学习find命令时掌握expression是重中之重。它告诉find命令如何匹配符合条件的文件,并对匹配到的文件执行哪些相应的操作(actions)。
从上面的find命令格式中我们可以看到一个完整的expression可以由options,tests,actions以及operators组成。
62万+





