find的运行原理
- find是从左向右处理的,所以表达式的前后顺序不同会造成不同的搜索性能差距。
- and的优先级高于or。
例:查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
find / -nouser -o -nogroup -a -atime -7
第一条命令按照find的运行原理可以解析为
( -nogroup -a -atime -7) -o -nouser
此时有一个a.txt 没有数组和属组,但是访问时间是7天之前的,那么这个文件也会匹配到。
a.txt 匹配-nogroup 为真,但是 -atime为假,()内整体为假,继续执行-o后面的匹配,此时a.txt没有属主,-nouser匹配成功,不符合题目要求。
我们可以通过下面命令来看下find解析的命令,将[]内容去掉就是find内部解析的命令。
find -D rates / -nouser -o -nogroup -a -atime -7
解析的指令如下:
( ( -atime -7 -a -nogroup ) -o -nouser ) -a -print
所以上面题目的对应命令得改变优先级
find / \( -nouser -o -nogroup \) -a -atime -7
参考链接: https://www.cnblogs.com/f-ck-need-u/p/6995529.html#auto_id_6
本文详细解析了find命令的运行机制,强调了and和or操作符的优先级,以及如何影响搜索性能。通过示例展示了如何正确构造表达式来查找特定条件的文件,如无属主或属组且最近一周内被访问过的文件。同时,文章提醒了用户通过`find -Drates`来查看命令的解析过程,以确保理解和优化find命令的执行效率。
1255

被折叠的 条评论
为什么被折叠?



