我认为自从我上次使用它以来,这个命令的格式发生了变化,现在我不理解它对我的期望。
我收到错误:find: unknown predicate '-name=*.xml'
它似乎试图调用find的方式是这样的:
find . \( -name="*.xml" \) -ls
我不明白这种语法:(是否尝试创建嵌套shell?为什么会这样?是否尝试创建参数列表?为什么会这样?
我可能只是去编辑这个函数来删除括号,但为什么有人会把它们放在那里?我一定错过了什么。
答案 0 :(得分:2)
括号将您放在一起的搜索词组合成一个逻辑分组,这样它们就不会影响其他任何内容。我怀疑它们被放在那里完全封装你可能放在那里的任何东西,以便-ls
(或由于其他变量设置而可能添加的任何其他选项等)总是执行。括号是括号的最高顺序。 不尝试创建嵌套shell;这就是\
s存在的原因:它正在传递它们以找到它自己。
但您真正的问题是,查找需要-name
后面有空格,而不是=
符号。 (即-name
的参数应该是一个单独的参数)。它不像许多你期望从其他工具那样的双破折号参数(特别是使用GNU getopt_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 `(...)'.