免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1146 | 回复: 2
打印 上一主题 下一主题

[文本处理] find命令中的-o与-prune使用时,-o的作用是什么? [复制链接]

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-05-24 13:41 |只看该作者 |倒序浏览
我想在根目录下,除了/ebs目录下查找大于1G的文件,写法如下:

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

这里的 -o 是什么意思?


论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
2 [报告]
发表于 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不是逻辑或的意思,是逻辑与的意思,请大侠帮忙答疑。

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
3 [报告]
发表于 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 且不进入该目录,输出其他目录项
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP