find 命令的手册页概要部分是否错误?

find 命令的手册页概要部分是否错误?

因此,当我忘记如何运行某个命令时,我一直试图养成在开始谷歌之前先查看手册页的习惯。

我今天查看了 find 命令的手册页,在概要部分中,它将命令的格式指定为:

SYNOPSIS
       find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

这不是表明选项必须位于路径之前,然后是表达式吗?或者大纲没有指定顺序?

当我使用 find 时,我必须在选项之前指定路径,如下所示:

find . -cmin -10 -ls

答案1

-cmin并且-ls谓词是其中的一部分表达,不是选项。

请注意,您可以使用 标记选项的结尾--,但在其后仍然允许使用谓词。

使用 GNU find,允许省略路径:

find -- -L

会抱怨未知 -L 谓词(尽管-L是有效的选项实际上有一个-follow等价的谓词)。

这就是为什么虽然

find "$file"

喜欢

wc "$file"

$file以 开头时无法正常工作-

这样做wc -- "$file"可以修复它wc(除了 的特殊情况file='-'),但不能修复它find -- "$file"。 FreeBSDfind已经做到了find -f "$file"这一点。

答案2

find命令非常古老,可以追溯到Unix V5。当时,命令行语法约定还没有像现在这样牢固建立。一些旧程序偏离了这些约定。

原本,find没有选择。它期望第一个参数是要遍历的目录,其余参数是表达式。计算每个文件的表达式指示是否应打印该文件(或者更一般地指示如何处理该文件)。该表达式由运算符及其操作数组成。查找运算符以 开头-(除了一些标点符号),原因与选项以-: 开头的原因相同,因为它在 shell 中没有任何特殊含义,因此很容易键入,但它可以与文件名区分开来,因为理性的人不会这样做t 以-.开头的文件名

运营商不是选项。为什么?因为它们没有选项的语法...它们有选项的拼写(以 开头-),但它们在不同的上下文中使用。

后来find获得了一些可以被视为选项的东西 - 像-depth这样的全局设置实际上在表达式中没有任何业务。这些被放入表达式中是为了保持一致性,因为find没有选项。

再后来,find获得了一些选项,使用通常的选项语法:选项在非选项之前。这样做是为了与支持相同选项(-H-L配置符号链接行为)的许多其他程序保持一致。

概要告诉你这些-H-L等等首先是路径,然后是表达式。概要语法并不总是能表达所有的可能性。如果它是完整的,它将无法阅读,所以你所知道的就是它提供了一种可能性。如果您想确切地知道什么是可能的,什么是不可能的,您需要进一步阅读。例如,-H-L等可以按任何顺序出现,只要它们位于路径之前即可。

相关内容