我认为自从我上次使用此命令以来,它的格式发生了变化,现在我不明白它对我的期望。
我收到一个错误:find: unknown predicate '-name=*.xml'
它似乎试图调用 find 的方式是这样的:
find . \( -name="*.xml" \) -ls
我不明白这种语法:(它是否试图创建一个嵌套的shell?为什么会这样?它是否试图创建一个参数列表?为什么会这样?
我可能只是去编辑这个函数以删除括号,但为什么有人会把它们放在那里?我肯定错过了什么。
括号将您放在一起的搜索词组合成一个逻辑分组,因此它们不会影响之后的任何其他内容。我怀疑它们放在那里是为了完全封装您可能放在那里的任何东西,以便-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 `(...)'.