2008-08-20 32 views
17

मैं अपने सिस्टम पर स्थापित शेल स्क्रिप्ट फ़ाइलों के लिए देख रहा हूँ, लेकिन काम नहीं करता है लगता है:** ** ** कुछ भी क्यों नहीं ढूंढता है?

$ find /usr -name *.sh 

लेकिन मैं जानता हूँ कि वहाँ लिपियों के एक टन कर रहे हैं। उदाहरण के लिए:

$ ls /usr/local/lib/*.sh 
/usr/local/lib/tclConfig.sh 
/usr/local/lib/tkConfig.sh 

क्यों काम नहीं मिल रहा है?

$ find /usr -name \*.sh 

या:

$ find /usr -name '*.sh' 

आपको लगता है कि मेल खाता है * .sh वर्तमान कार्यशील निर्देशिका में एक फ़ाइल के लिए हो, तो वाइल्डकार्ड विस्तार किया जाएगा

+2

यह एक SuperUser सवाल है ? – endolith

+0

यह [यूनिक्सई] पर बेहतर फिट बैठता है (http://unix.stackexchange.com/) –

उत्तर

51

कोशिश वाइल्डकार्ड के हवाले इसे खोजने से पहले। आप अपने काम निर्देशिका में tkConfig.sh नाम की एक फ़ाइल के लिए होते हैं तो लगता है आदेश का विस्तार होगा:

$ find /usr -name tkConfig.sh 

जो केवल फाइलों नामित tkConfig.sh पाते हैं। आपको लगता है कि मेल खाता है * .sh एक से अधिक फ़ाइल था, तो आप प्राप्त होता से एक सिंटैक्स त्रुटि पाते हैं: फिर

$ cd /usr/local/lib 
$ find /usr -name *.sh 
find: bad option tkConfig.sh 
find: path-list predicate-list 

, कारण यह है कि वाइल्डकार्ड दोनों फ़ाइलों के लिए विस्तारित है:

$ find /usr -name tclConfig.sh tkConfig.sh 

वाइल्डकार्ड का उद्धरण इसे समय-समय पर विस्तारित होने से रोकता है।

एक और संभावना यह है कि/usr या इसकी उपनिर्देशिकाओं में से एक एक सिम्लिंक है। लगता है ताकि आप का पालन करें विकल्प आवश्यकता हो सकती है सामान्य रूप से लिंक का पालन नहीं करता है,: (उदाहरण के लिए, सोलारिस)

$ find /usr -follow -name '*.sh' 
+0

क्या होगा यदि फ़ाइल एक शेल स्क्रिप्ट है लेकिन '.sh' एक्सटेंशन की कमी है? हो सकता है कि कुछ ढूंढें/xyz | xargs फ़ाइल | grep खोल'? –

+0

हालांकि, कितनी बार शैल स्क्रिप्ट ** ** नहीं है। एक .sh एक्सटेंशन है? –

+0

क्या वाइल्डकार्ड का विस्तार किया जा रहा है, यह जानने का कोई सामान्य तरीका है? – isaacg

15

कुछ सिस्टम पर, वहाँ कोई डिफ़ॉल्ट क्रिया है, ताकि आप जोड़ने की जरूरत है - प्रिंट कमांड

find /usr -name '*.foo' -print 
+1

को छोड़कर बहुत सारी लिपियों को देखा है। मैं अतीत में थोड़ा सा रहा हूं। लेकिन मुझे यह इंगित करना चाहिए कि एक आधुनिक सोलारिस बॉक्स पर, -प्रिंट डिफ़ॉल्ट रूप से चालू है। वास्तव में, मुझे ऐसा कोई प्रतीत नहीं होता है जो इस तरह से काम नहीं करता है। –

7

आपके डिस्क पर फ़ाइलें खोजने के लिए, दुबला उपयोग करने के लिए "का पता लगाने" के बजाय कि तात्कालिक है (एक दैनिक बनाया सूचकांक में दिखता है) आप उदाहरण होगा:

locate '/usr*.sh' 
+0

एक अच्छा सुझाव। (मुझे इस विचार का परीक्षण करने के लिए मेरी मशीन पर अपडेट किया गया था, क्योंकि मेरे पास किसी कारण से मेरे क्रॉन्टाब में नहीं है। अद्यतित डेटाबेस नहीं होने का पता लगाने का मुख्य कारण नहीं होगा।) –

+0

और ऐसे कुछ सिस्टम हैं जिन्हें डिफ़ॉल्ट रूप से स्थापित नहीं किया गया है - मैंने पाया कि मुझे अपने रास्पबेरी पीआई पर 'mlocate' पैकेज स्थापित करना था - इंडेक्स बनाने के लिए' सुडो अपडेटब 'को भूलना नहीं ... – SlySven