0

我认为自从我上次使用此命令以来,它的格式发生了变化,现在我不明白它对我的期望。

我收到一个错误:find: unknown predicate '-name=*.xml'

它似乎试图调用 find 的方式是这样的:

find . \( -name="*.xml" \) -ls

我不明白这种语法:(它是否试图创建一个嵌套的shell?为什么会这样?它是否试图创建一个参数列表?为什么会这样?

我可能只是去编辑这个函数以删除括号,但为什么有人会把它们放在那里?我肯定错过了什么。

4

1 回答 1

2

括号将您放在一起的搜索词组合成一个逻辑分组,因此它们不会影响之后的任何其他内容。我怀疑它们放在那里是为了完全封装您可能放在那里的任何东西,以便-ls(或由于其他变量设置等而可能添加的任何其他选项)始终执行。括号是括号的最高阶。它不是试图创建一个嵌套的 shell;这就是\s 存在的原因:它通过它们找到自己。

但你真正的问题是 find 需要-name在它之后有一个空格,而不是一个=符号。(即,参数-name应该是一个单独的参数)。它不像您期望从其他工具(特别是使用 GNUgetopt_long 解析实现编写的那些)中获得的许多双破折号参数那样工作。

所以,试试吧-name *.xml

对于其他信息,这里是关于()s 的查找手册页:

   ( expr )
          Force  precedence.   Since parentheses are special to the shell,
          you will normally need to quote them.  Many of the  examples  in
          this  manual  page  use  backslashes for this purpose: `\(...\)'
          instead of `(...)'.
于 2012-09-04T12:08:46.057 回答