gpt4 book ai didi

find - 查找中的分组谓词

转载 作者:行者123 更新时间:2023-12-04 13:35:49 24 4
gpt4 key购买 nike

这部分“(-name * txt -o -name * html)”在代码中使我感到困惑:

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

有人可以解释方括号和“-o”吗?是“-o”命令还是参数?我知道括号用“\”转义,但是为什么呢?

最佳答案

默认情况下,find参数列表中的条件是“与”在一起的。 -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的评论促成了这一点。

关于find - 查找中的分组谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com