Chinaunix

标题: find命令中的-o与-prune使用时,-o的作用是什么? [打印本页]

作者: 274920831    时间: 2017-05-24 13:41
标题: find命令中的-o与-prune使用时,-o的作用是什么?
我想在根目录下,除了/ebs目录下查找大于1G的文件,写法如下:

find / -path "/ebs" -prune -o -type f -size +1000M -print

这里的 -o 是什么意思?



作者: 274920831    时间: 2017-05-24 17:01
首先对于这个命令:
find / -path "/ebs" -prune -o -type f -size +1000M -print

-o是逻辑或,就是说-o前面的命令如果false才执行后面的命令。
前面的命令是find / -path "/ebs" -prune , 这是要在除了/ebs目录下的其它的目录中做查找,如果false才执行 -o 后面的操作,但是我现在利用这个命令的输出的结果是查找除了/ebs目录查找大于1G的文件,感觉这里的-o不是逻辑或的意思,是逻辑与的意思,请大侠帮忙答疑。
作者: 274920831    时间: 2017-05-24 17:15
自己跟自己解答一下:
相关链接:

http://blog.csdn.net/sosodream/article/details/6410846

下面的最后一段对这个命令做了很好的解释:

第五条命令,是man find里的一个例子:
find . -wholename ’./src/emacs’ -prune -o -print
先提二点
-wholename 或者有 -path替代,gnu的find较新的版本中,这二个已经没啥差别了
这条命令,用到了 -prune,  注意这里 -prune 是个 action,而不是test
然后对这条find命令拆分
path为.,即当前目录
expression为复合句,用-o拆分成二个子句,只有前一子句false时,才执行第二子句
          第一个:-wholename ’./src/emacs’ -prune
                这里test条件为:-wholename ’./src/emacs’,
                      action为: -prune ,执行“挑过子目录解析”,
                    若test 结果为false,即没匹配到./src/emacs, 是不执行action的,子句结果为false
                    若test 结果为true,即匹配到  ./src/emacs ,则执行action:跳过
                 综合起来就是:当目录项(文件或目录)匹配./src/emacs 时,执行prune,即“不进入该目录”,或者说跳过该目录解析,expression为true
                               当目录项(文件或目录)不匹配./src/emacs 时,expression为true
          第二个:-print
                 这个子句省略了test,默认即为true,-print是acion,即输了
                 在前一个语句的false的情况下才执行第二个语句,
所以整个复合的expression即,跳过目录:./src/emacs 且不进入该目录,输出其他目录项





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2