2012-10-05 56 views
5

我一直在使用zsh的通配符進行諸如命令:爲什麼zsh globbing不能使用find命令?

vim **/filename 
vim *.html.erb 

等等,但是當我像鍵入:

find . -name *mobile* 

我得到的迴應:

zsh: no matches found: *mobile* 

爲什麼?

+0

我認爲這裏有更好的回答:https://unix.stackexchange.com/questions/130958/scp-wildcard-not-working-in-zsh – sttaq

回答

29
find . -name *mobile* # does not work 

VS

find . -name '*mobile*' # works 

的差異是由於以下步驟,當它解析線殼需要。通常情況下,shell會在運行命令之前擴展它找到的所有通配符。但是,單引號將參數標記爲文字,這意味着在運行該命令之前,shell不會對該參數執行通配符擴展。

爲了展示差別,假設你是在以下文件目錄:

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

的zsh將展開第一個形式運行前執行以下操作:

find . -name mobile.1 

這意味着,找到只會尋找文件名字面意思mobile.1

第二種形式將運行如下:

find . -name *mobile* 

這意味着find將查找包含字符串「mobile」的任何文件名。

這裏需要注意的重要一點是,zsh和find都支持相同的通配符語法,但是您希望在本例中找到處理通配符而不是zsh的。

1

結果證明,所有你需要做的要解決的問題是周圍添加輸入一些報價:

find . -name '*mobile*' 

我真的不知道答案,爲什麼只是還沒有...和文檔沒有任何東西對我有用,但是如果你知道答案,請告訴我!

相關問題