2011-12-22 8 views
36

मेरे पास एक फ़ाइल है /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Homeयूनिक्स में कुछ एक्सटेंशन के साथ सभी फाइलें ढूँढना?

मैं यह खोजने की कोशिश कर रहा हूं कि मेरे हार्ड ड्राइव पर कहीं और। .jdk है या नहीं। तो मैं एक खोज कमांड करता हूं:

find . -name "*.jdk" 

लेकिन यह कुछ भी नहीं मिला है। मुझे यह भी नहीं पता कि मेरे पास है। कैसे?

उत्तर

70

find . केवल आपकी वर्तमान निर्देशिका में दिखता है। कि

करके

find/-type f -name "*.jdk" 

आप से इंकार संदेशों तो आप को दबाने कर सकते हैं अनुमति की टन मिल रहे हैं - आप अनुमतियाँ अन्य निर्देशिकाओं में से फ़ाइलें (रूट पहुँच) देखने के लिए है तो आप अपनी फ़ाइल ढूंढने के लिए निम्न का उपयोग कर सकते

find/-type f -name "*.jdk" 2> /dev/null 
+3

@ प्रोस्टाक, यह केवल नियमित फाइलें दिखाएगा, निर्देशिका नहीं। '-type f' प्रतीकात्मक लिंक, निर्देशिका, डिवाइस, और ऐसे फ़िल्टर को फ़िल्टर करना है। – BRFennPocock

+0

मैं इसे सही उत्तर के रूप में चिह्नित कर रहा हूं। लेकिन आपकी मदद के लिए आप दोनों को धन्यवाद! – Prostak

4

शायद आपके जेडीके अपरकेस हैं और/या ओएस एक्स पर उपलब्ध find का संस्करण -print पर डिफ़ॉल्ट नहीं है यदि कोई कार्रवाई निर्दिष्ट नहीं है; प्रयास करें:

find . -iname "*.jdk" -print 

(-iname-name की तरह है, लेकिन एक केस-संवेदी मिलान किया जाता है; -printfind से कहता परिणाम बाहर मुद्रित करने के लिए)

--- संपादित करें ---

द्वारा बताया गया है @ जयपाल, स्पष्ट रूप से find . ... केवल वर्तमान निर्देशिका (और उपनिर्देशिका) में दिखता है, यदि आप खोज पथ के रूप में / निर्दिष्ट करने के लिए पूरे ड्राइव को खोजना चाहते हैं।

+1

क्यों आप का उपयोग करने के लिए है '-print', 'isn डिफ़ॉल्ट नहीं है? –

+1

@giannischristofakis: बस POSIX मानक की जांच की, हाँ, यह डिफ़ॉल्ट है; शायद मैंने इसे स्पष्ट रूप से लिखा क्योंकि मुझे डर था कि यह एक जीएनयूइज्म था जिसका इस्तेमाल किया गया था (उदाहरण के लिए, जीएनयू में आप पाते हैं कि आप ''' भी छोड़ सकते हैं, जबकि बीएसडी में आईआईआरसी को इसकी आवश्यकता है)। –

2

'।' आप वर्तमान निर्देशिका का उपयोग कर रहे हैं। यदि आप अपने घर के डीआईआर में शुरू कर रहे हैं, तो शायद यह जेडीके फाइलों को याद करेगा।

सबसे खराब मामला खोज कुछ पथ आप को आप JDK फ़ाइलों माता पिता होना चाहिए कुछ कर रहे हैं के साथ जड़ से शुरू करने के लिए

find/-name '*.jdk' -o -name '*.JDK' -print 

अन्यथा की जगह '/' है।

मुझे उम्मीद है कि इससे मदद मिलती है।

8

एक/

find . मतलब है, "लगता है (वर्तमान निर्देशिका में शुरू)।" यदि आप पूरी प्रणाली खोजना चाहते हैं, तो find / का उपयोग करें; /System/Library के तहत खोज करने के लिए, find /System/Library का उपयोग, आदि

बी/

यह वाइल्डकार्ड के आसपास एकल उद्धरण का उपयोग करने के लिए सुरक्षित है। अगर नाम की कोई फाइल नहीं है *।

find . -name *.jdk 

अगर, हालांकि, आप हो सकता है जब आप इसे चलाने फ़ाइलों junk.jdk और वर्तमान निर्देशिका में foo.jdk है,: काम कर निर्देशिका में JDK जब आप इस चलाने के लिए, तो find की एक कमांड लाइन मिल जाएगा find बजाय के साथ शुरू किया जाएगा:

find . -name junk.jdk foo.jdk 

... जो होगा (के बाद से वहाँ दो हैं) यह भ्रमित, और इसे बाहर त्रुटि के कारण। आप तो foo.jdk हटा सकते हैं और ठीक उसी बात फिर से करते हैं, तो आप

find . -name junk.jdk 

... जो (जैसे) 1.6.0.jdk नाम की एक फ़ाइल कभी नहीं मिलेगा होगा।

क्या आप शायद इस संदर्भ में चाहते हैं,

find /System -name '*.jdk' 

है ... या, आप "पलायन" कर सकते हैं * के रूप में:

find /System -name \*.jdk 
संबंधित मुद्दे