为什么zsh globbing不能使用find命令?

时间:2012-10-05 20:54:25

标签: unix zsh glob

我一直在使用zsh globbing来执行命令,例如:

 vim **/filename
 vim *.html.erb

依此类推,但当我输入类似的内容时:

 find . -name *mobile*

我收到回复:

 zsh: no matches found: *mobile*

为什么?

2 个答案:

答案 0 :(得分:34)

find . -name *mobile* # does not work

VS

find . -name '*mobile*' # works

差异是由于shell在解析一行时所采取的步骤。通常,shell会在运行命令之前展开它找到的任何通配符。但是,单引号将参数标记为文字,这意味着shell在运行命令之前不会对该参数执行通配符扩展。

为了证明这种差异,假设您在一个包含以下文件的目录中:

$ tree
./
mobile.1
dir/
    mobile.2

zsh会在运行之前将第一个表单扩展为以下表单:

find . -name mobile.1

这意味着find只会查找名为literally mobile.1的文件。

第二个表格将按如下方式运行:

find . -name *mobile*

这意味着find将查找包含字符串“mobile”的任何文件名。

这里需要注意的重要一点是,zsh和find都支持相同的通配符语法,但是你希望find在这种情况下处理通配符,而不是zsh。

答案 1 :(得分:1)

事实证明,解决问题所需要做的就是在输入周围添加一些引号:

find . -name '*mobile*'

我真的没有答案为什么......而且文档中没有一些东西可以帮助我,但如果你知道答案,请告诉我!

相关问题