当前位置:  开发笔记 > 前端 > 正文

在查找中对谓词进行分组

如何解决《在查找中对谓词进行分组》经验,为你挑选了1个好方法。

这部分"(-name*txt -o -name*html)"让我对代码感到困惑:

find $HOME \( -name \*txt -o -name \*html \) -print0 | xargs -0 grep -li vpn

有人可以解释括号和"-o"吗?"-o"是命令还是参数?我知道括号被"\"转义,但为什么它们适合?



1> Jonathan Lef..:

默认情况下,查找参数列表中的条件是'和'在一起.该-o选项意味着'或'.

如果你写道:

find $HOME -name \*txt -o -name \*html -print0

然后没有与文件名相关联的输出操作以'txt'结尾,因此不会打印它们.通过将名称选项与括号分组,您可以获得'html'和'txt'文件.


考虑这个例子:

mkdir test-find
cd test-find
cp /dev/null file.txt
cp /dev/null file.html

以下评论对此有一个有趣的侧面.如果命令是:

find . -name '*.txt' -o -name '*.html'

然后,由于没有为任何替代方案指定显式操作,因此默认-print(不是-print0!)操作用于两个备选方案,并列出两个文件.通过-print其中一个备选方案(但不包括另一个备选方案)之后的其他显式操作,则只有具有该操作的备选方案才会生效.

find . -name '*.txt' -print -o -name '*.html'

这也表明您可以针对不同的替代方案采取不同的行动.您还可以应用其他条件,例如修改时间:

find . \( -name '*.txt' -o -name '*.html' \) -mtime +5 -print0

find . \( -name '*.txt'  -mtime +5 -o -name '*.html' \) -print0

第一个打印超过5天的txt或html文件(因此它不打印任何示例目录 - 文件只有几秒钟); 第二个打印超过5天的txt文件或任何年龄的html文件(所以只是file.html).等等...

感谢DevSolar对他的评论.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有