find-dired如何传递参数?

时间:2012-09-04 11:28:52

标签: linux emacs find dired

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

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

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

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

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

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

1 个答案:

答案 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 `(...)'.