无法完全理解 Unix 'find' 命令手册

无法完全理解 Unix 'find' 命令手册

我发现 Find 手册的摘要很难阅读 替代文本 http://files.getdropbox.com/u/175564/syntax_manual.png

我们假设您正在寻找具有 777 权限的目录。 像素节拍的建议是

find -type d ! -perm -777

我的 OS/X 给出以下信息

find: illegal option -- t
find: illegal option -- y
find: illegal option -- p
find: illegal option -- e
find: d: No such file or directory

使用概要作为帮助时我不确定的事情

  • 看不到选项放在哪里-type我可以清楚地测试这一点,但我想学会更好地阅读手册,这样我就不需要寻求帮助了。
  • 无法理解为什么我们需要两行摘要:似乎强调许多 PATH 是可选的
  • 为什么 Pixelbeat 在命令中使用感叹号?

我们再来看一个 Grep 手册的例子。

替代文本 http://files.getdropbox.com/u/175564/grep_manual.png

它有一个清晰的概要,尽管我只会使用一行。我可以直接看到我们可以通过 grep

grep -r "masi" .

如何阅读类似于 Find 手册的手册?

答案1

首先要意识到的是,并非所有 find 命令都是一样的。在 Linux 系统上找到的 find 命令与在基于 BSD 的系统(如 OSX)上找到的 find 命令不同。您要参考的参考资料适用于 Linux。

对于 find 命令,“-type”选项是一个表达式,必须位于路径之后。如果您进一步阅读手册页,它将描述哪些选项是表达式。

感叹号表示否定。也就是说,它返回除权限为 777 的内容之外的所有内容。

命令 ”查找 -type d !-perm -777“无效,因为您没有在表达式前包含路径。您可以使用以下路径如果想要当前目录。

回到主要问题。有时只阅读手册页的摘要是不够的,您实际上必须阅读其余部分。有些命令非常强大,除非您阅读或至少浏览整个文档,否则您将无法很好地了解如何使用命令。如果有示例,查看它们也很有帮助,如果没有,请上网查找一些示例。

答案2

您尚未指定目录

find . -type d ! -perm -777

您引用的手册页指出路径名应该先于表达。因此,在这种情况下,点“。”位于“之前-类型 d ...“。后者本身并不是选择。事实上-类型-perm是 find 尝试对每个文件进行评估的布尔表达式的一部分。

答案3

无法看到选项 -type 的位置

-type不是一个选项,而是一个表达式。所以它位于参数列表的末尾。如果您向下滚动手册页,您将找到一个标题为表达式的部分,其中详细介绍了此参数的所有可用选项。

无法理解为什么我们需要两行概要:它似乎强调许多路径是可选的

可以使用参数 或 来调用该程序pathname-f pathname根据经验,方括号内的任何参数都是可选的。但那些不是的参数是必需的。这就是为什么 find 命令不起作用的原因——因为它在任何“路径名”之前都有“表达式”。点表示可以选择使用多个路径名参数。

为什么 Pixelbeat 在命令中使用感叹号?

我无法在您提供的链接中看到指定的命令。但是……

感叹号可用于否定后面的表达式。因此,该命令find . -type d将查找目录并find . ! -type d查找除目录之外的所有内容。不过,建议使用前面的反斜杠转义感叹号,这样您的 shell 就不会解释它。它也可以与 互换-not

答案4

是的,我安装的 Mac OS X 的手册页find有点误导。概要列出了表达式放在最后,但逻辑上应该标为“表达式”的部分却被分成两部分,标题为“主要部分”和“操作符”。我总是阅读“描述”的前几行,因此应该注意,他们在那里澄清了这个问题:

DESCRIPTION
     The find utility recursively descends the directory tree for each
     pathname listed, evaluating an expression (composed of the ``primaries''
     and ``operands'' listed below) in terms of each file in the tree.

这最终会提示您发现奇怪之处,因为以“-”开头的非选项参数实际上是必须以路径开头的表达式。

对于手册页,我给出的最有用的建议是学习分页器的命令。默认的命令似乎是less,在这里您可以使用<转到开头>或转到结尾,以及/?向前或向后搜索模式(例如“/-type”)。Control-f以及space前进一页和Control-b后退一页。xman您还可以在其中键入Control-s以搜索标题为的手册页find。我也喜欢这个apropos命令。

相关内容