写在前面
对于玩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
组成。