find 中的谓词分组

2023-12-29

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

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

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


默认情况下,查找参数列表中的条件是“与”在一起的。这-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 (not -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 的评论导致了这一补充。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

find 中的谓词分组 的相关文章

  • 查找列表中 int 的索引

    有没有办法从列表中获取 int 的索引 寻找类似的东西list1 FindIndex 5 我想在列表中找到 5 的位置 Use the IndexOf 列表的方法 该方法的规范可以在MSDN http msdn microsoft com
  • GNU find:什么时候应用默认操作?

    Debian 8 的 find 命令的手册页显示 如果整个表达式不包含除 prune 或 print 之外的任何操作 print 对整个表达式为 true 的所有文件执行 那么为什么这些输出不同 mkdir p test foo test
  • Linux 删除超过 1 年的文件夹和超过 3 个文件

    我正在编写一个 ant 脚本来清理存档文件夹 以下是我需要清理的方法 我需要删除超过一定天数的旧文件夹 并且其中包含超过 3 个文件 例如 如果某个文件夹已有 300 天的历史 但只有 3 个文件 则该文件夹不会被删除 我知道我可以通过 s
  • 匹配一行中的第 n 个单词

    在我使用的应用程序中 我无法选择比赛组 1 我可以使用的结果是正则表达式的完整匹配 但我需要第 5 个单词 jumps 作为匹配结果 而不是完整的匹配项 The Quick Brown Fox Jumps 4 The quick brown
  • Mac“find”和Linux“find”之间的区别[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我继承了一个脚本作为应用程序构建过程的一部分 当我在构建服务器 Ubuntu Precise 上运行它时 它运行良好 但是当我在我的 ma
  • 匹配 Unix 上文件中的日期

    我有以下内容unix命令 我用它来尝试查找格式中的日期yyyy mm dd在一个文件中 grep i w d 4 d 2 d 2
  • 如何在Lua中隔离由空格分隔的非英语单词?

    我有这个字符串 Hello there this is some line aa 如何将其切片成这样的数组 Hello there this is some line aa 这是我到目前为止所尝试过的 function sliceSpace
  • `find -exec` 中这个奇怪的语法是什么?

    最近我遇到了一个奇怪的 bash 脚本 它用于从内部调用自定义 bash 函数find exec 我开发了以下简单的脚本来演示我需要解释的功能 在下面的示例中 函数foo每个都会被调用find result foo echo export
  • 如何使 find() 能够处理一组结构?

    我正在使用一个set保存包含多个字符串的结构 我希望能够使用find 集的功能 但是 由于该集合保存结构 因此它不起作用 我想find 仅查看结构中的字符串之一 如何才能做到这一点 这是我尝试使用的代码 除了以下部分之外 它工作正常find
  • Linux/Cygwin 递归复制文件更改扩展名[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找一种方法来递归查找扩展名为 X 的文件 js 并在同一目录中复制该文件 扩展名为 Y ts 例如 foo bar foobar js gt
  • cakephp:查找带有“包含”的语句

    以下用户模型函数来自 MilesJones 论坛插件 有人可以告诉我 find stmt txt 中的 contain 有什么用吗 我在 cakephp 食谱中找不到任何包含的示例 任何帮助表示赞赏 public function getP
  • 命令行查找、sed、exec

    我在一个文件夹 子文件夹中有一堆文件 我试图制作某种单行代码 以便偶尔快速复制 粘贴 内容如下 太长 无法粘贴到此处 http pastebin com 4aZCPbwT http pastebin com 4aZCPbwT 我尝试过以下命
  • 错误:“grep:参数列表太长”[重复]

    这个问题在这里已经有答案了 我正在尝试运行以下命令 但出现参数太长错误 你能帮我吗 HOST grep rl pattern home public html bash bin grep Argument list too long 有没有
  • 如何告诉 find 命令转义文件名中的空格字符?

    我有一个单行 find 命令 它递归地检查并打印出在特定时间范围内创建的特定文件类型的大小 所有者和名称 但在结果中 给出文件名列 直到目录或文件名中的第一个空格字符为止 有没有办法在这个单一命令中解决这个问题 而无需在 bash 中编写任
  • 浏览器Ctrl+F查找不可见文本

    Can the browser feature of Ctrl F to find text be integrated with text in popup windows I d like to have some scientific
  • 查找出现次数最多的单词

    搜索文档中出现次数最多的单词的最佳方法 算法 是什么 查找文档中出现次数最多的单词可以通过简单的 O n 时间复杂度完成直方图 http en wikipedia org wiki Histogram 基于哈希 histogram lt n
  • 如何为 HDFS 递归列出子目录?

    我在 HDFS 中递归创建了一组目录 如何列出所有目录 对于普通的 UNIX 文件系统 我可以使用以下命令来做到这一点 find path type d print 但我想为 HDFS 得到类似的东西 递归列出目录内容hadoop dfs
  • 如何使用unix“find”命令查找所有cpp和h文件?

    我知道要找到所有 h我需要使用的文件 find name h 但如何找到所有 h AND cpp files find name h print o name cpp print or find name h o name cpp prin
  • 如何让 Ruby 的 Find.find 遵循符号链接?

    我有一个文件层次结构 一些子目录是相对符号链接 我在用Ruby s Find find http apidock com ruby Find爬行这些目录并找到一些特定的文件 但是 它不会查找任何符号链接的目录 它遵循符号链接的文件 看着源代
  • Perl 初学者:如何查找/替换文件中的 ASCII 字符?

    我对 Perl 完全陌生 我认为这将是解决我的简单任务的最佳语言 我需要将二进制文件转换为可读的文件 并且需要查找和替换字符串 例如 x00 x39 into x09 选项卡 或类似的东西 从 bash 开始 我从以下内容开始 效果很好 p

随机推荐