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