2012-10-05 15 views
5

मैं zsh उपयोग किया गया है, जैसे कि आदेश के लिए ग्लोबिंग:zsh globbing खोज कमांड के साथ क्यों काम नहीं कर रहा है?

vim **/filename 
vim *.html.erb 

और इतने पर, लेकिन जब मैं की तरह कुछ में टाइप करें:

zsh: no matches found: *mobile* 
:

find . -name *mobile* 

मैं प्रतिक्रिया मिल

क्यों?

+0

मुझे लगता है कि इसका यहां एक बेहतर उत्तर है: https://unix.stackexchange.com/questions/130958/scp-wildcard-not-working-in-zsh – sttaq

उत्तर

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

बनाम

find . -name '*mobile*' # works 

अंतर यह है कि खोल जब यह एक पंक्ति को पार्स करता है लेता चरणों के कारण है। आम तौर पर, खोल किसी भी वाइल्डकार्ड को फैलाता है जो इसे कमांड चलाने से पहले पाता है। हालांकि, एकल उद्धरण तर्क को शाब्दिक होने के रूप में चिह्नित करते हैं, जिसका अर्थ यह है कि शेल कमांड चलाने से पहले उस तर्क पर वाइल्डकार्ड विस्तार को पूर्ववत नहीं करता है।

अंतर प्रदर्शित करने के लिए, मान लीजिए आप निम्न फ़ाइलों के साथ एक निर्देशिका में हैं:

find . -name mobile.1 

कि इसका मतलब है:

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

zsh चलाने से पहले निम्न के प्रथम रूप का विस्तार होगा खोज केवल शाब्दिक मोबाइल नाम की फाइलों को देखेंगे।

दूसरा फॉर्म निम्नानुसार चलाया जाएगा:

find . -name *mobile* 

जिसका अर्थ है कि खोज "मोबाइल" स्ट्रिंग वाले किसी फ़ाइल नाम की तलाश करेगी।

यहां ध्यान देने योग्य महत्वपूर्ण बात यह है कि दोनों zsh और समान वाइल्डकार्ड वाक्यविन्यास का समर्थन करते हैं, लेकिन आप इस मामले में वाइल्डकार्ड को संभालना चाहते हैं, zsh नहीं।

1

बाहर कर देता है कि सभी आप हल करने के लिए समस्या इनपुट के आसपास कुछ उद्धरण जोड़ने है क्या करने के लिए:

find . -name '*mobile*' 

मैं वास्तव में करने के लिए के रूप में एक जवाब नहीं है यही कारण है कि बस अभी तक ... और प्रलेखन मेरे पास कोई चीज नहीं है जो मुझे चिपक जाती है, लेकिन अगर आपको जवाब पता है तो मुझे बताएं!