2009-03-18 10 views
30

से निर्देशिका में फ़ाइल ढूंढें eclipse और textmate जैसे संपादकों/ides में, प्रोजेक्ट निर्देशिका में किसी विशेष फ़ाइल को तुरंत ढूंढने के लिए शॉर्टकट हैं।कमांड लाइन

क्या किसी भी निर्देशिका (रिकर्सिवली) में फ़ाइल नामों पर पूर्ण पथ पूर्ण करने के लिए बैश या अन्य खोल में एक समान उपकरण है?

मेरे पास बहुत सारी निर्देशिकाओं के साथ परियोजनाएं हैं, और उसमें गहरे हैं (श्वास, जावा)। खोल में टैब साधते तत्काल निर्देशिका में फ़ाइलों के माध्यम से ही चक्र, पर्याप्त नहीं =/

+0

की संभावित डुप्लिकेट [मैं लिनक्स पर विशिष्ट टेक्स्ट वाली सभी फाइलों को कैसे पता करूं?] (Https://stackoverflow.com/questions/16956810/how-do-i-find-all-files-containing-specific-text -ऑन-लिनक्स) – Bruno

उत्तर

53
find /root/directory/to/search -name 'filename.*' 
# Directory is optional (defaults to cwd) 

स्टैंडर्ड यूनिक्स ग्लोबिंग समर्थित है thats। अधिक जानकारी के लिए man find देखें।

आप विम का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं:

:e **/filename.cpp 

या :tabn या किसी विम आदेश जो एक फ़ाइल नाम स्वीकार करता है।

+0

@ ब्रायन ओकले, संपादन के लिए धन्यवाद, लेकिन यह विम के बारे में मेरे अतिरिक्त ओवरराइट! मैंने अपने उत्तर में निर्देशिका तर्क को दोहराया। धन्यवाद। – strager

+0

विम टिप के लिए धन्यवाद। यह एक उपयोगी है जिसे मैं अभी भी नहीं जानता था: पी – skinp

+1

क्या मौजूदा निर्देशिका में ऐसा करने के लिए वैसे भी ऐसा करने के लिए वैसे भी है? –

0

हां, bash में फाइलनाम पूर्णता तंत्र है। मैं उन्हें स्वयं का उपयोग नहीं करता (सीखने के लिए बहुत आलसी हूं, और मुझे इसे जरूरी बनाने के लिए अक्सर जरूरी नहीं लगता है), लेकिन बुनियादी तंत्र पहले कुछ अक्षर टाइप करना है, और फिर एक टैब; यह तब तक नाम का विस्तार करेगा जब तक कि यह नाम स्पष्ट नहीं हो सकता है (शायद बिल्कुल नहीं)। अच्छे ओल 'मैन पेज में पूरा होने से संबंधित Emacs- शैली के आदेशों का एक बोतलबंद है।

2

जब मैं यूनिक्स दुनिया में था (tcsh (sigh ...) का उपयोग करके), मेरे पास फाइलों की खोज के लिए सभी प्रकार के "ढूंढें" उपनाम/स्क्रिप्ट सेटअप होते थे। मुझे लगता है कि डिफ़ॉल्ट "लगता है" वाक्य रचना एक छोटे से भद्दा है, इसलिए मैं उपनाम/पाइप को स्क्रिप्ट किया करते थे ग्रेप में है, जो आप खोज के लिए रेगुलर एक्सप्रेशन का उपयोग करने की अनुमति देता "लगता है प्रिंट।":

# finds all .java files starting in current directory 
find . -print | grep '\.java' 

#finds all .java files whose name contains "Message" 
find . -print | grep '.*Message.*\.java' 
के

बेशक, उपर्युक्त उदाहरण सादे पुराने खोज के साथ किए जा सकते हैं, लेकिन यदि आपके पास एक और विशिष्ट खोज है, तो grep काफी मदद कर सकता है। यह बहुत अच्छी तरह से काम करता है, जब तक कि "ढूंढें। -प्रिंट" में रिकर्स करने के लिए बहुत सी निर्देशिकाएं हैं ... फिर यह बहुत धीमी हो जाती है। (उदाहरण के लिए, आप इसे रूट में शुरू नहीं करना चाहते हैं "/")

7

यदि आप फ़ाइलों की सूची के साथ कुछ करना चाहते हैं, तो आप bash $() निर्माण (संयुक्त से बेहतर) के साथ संयुक्त का उपयोग कर सकते हैं बैकटिक्स क्योंकि इसे घोंसला करने की इजाजत है)।

उदाहरण के लिए, कहें कि आप अपनी प्रोजेक्ट निर्देशिका के शीर्ष स्तर पर हैं और आप "btree" से शुरू होने वाली सभी सी फाइलों की एक सूची चाहते हैं। आदेश:

find . -type f -name 'btree*.c' 

उनकी एक सूची वापस कर देगा। लेकिन यह वास्तव में उनके साथ कुछ करने में मदद नहीं करता है।

तो, मान लीजिए कि आप उन सभी फ़ाइलों को स्ट्रिंग "ERROR" के लिए खोजना चाहते हैं या उन सभी को संपादित करना चाहते हैं। आप इसे निष्पादित कर सकते हैं:

grep ERROR $(find . -type f -name 'btree*.c') 
vi $(find . -type f -name 'btree*.c') 

ऐसा करने के लिए।

1

मैं इस प्रोजेक्ट में निर्देशिकाओं में फ़ाइलों को तेज़ी से ढूंढने के लिए इस script का उपयोग करता हूं।मैंने पाया है कि यह बहुत अच्छा काम करता है और खोज के लिए एक नया बफर खोलकर और बंद करके विम के स्वतः पूर्ण का लाभ उठाता है। यह आपके लिए जितना संभव हो सके स्मार्ट रूप से पूर्ण करता है ताकि आप आमतौर पर केवल एक अक्षर या दो टाइप कर सकें और फ़ाइल को अपनी प्रोजेक्ट में किसी भी निर्देशिका में खोल सकें। मैंने इसे विशेष रूप से जावा प्रोजेक्ट के कारण उपयोग करना शुरू कर दिया है और इसने मुझे बहुत समय बचाया है। जब आप टाइपिंग करके अपना संपादन सत्र शुरू करते हैं तो आप केवल कैश बनाते हैं: एफसी (निर्देशिका नाम)। आप भी उपयोग कर सकते हैं। वर्तमान निर्देशिका और सभी उपनिर्देशिका प्राप्त करने के लिए। उसके बाद आप बस टाइप करें: एफएफ (या एक नया विभाजन खोलने के लिए एफएस) और यह आपके इच्छित फाइल का चयन करने के लिए एक नया बफर खुल जाएगा। फ़ाइल का चयन करने के बाद अस्थायी बफर बंद हो जाता है और आप अनुरोधित फ़ाइल के अंदर हैं और संपादन शुरू कर सकते हैं। इसके अलावा, here स्टैक ओवरफ़्लो पर एक और लिंक है जो मदद कर सकता है।

0

locate <file_pattern>

*** find निश्चित रूप से काम करेंगे, और विशिष्ट निर्देशिका लक्षित कर सकते हैं। हालांकि, यह आदेश locate कमांड से धीमा है। एक लिनक्स ओएस पर, प्रत्येक सुबह एक डेटाबेस बनाया जाता है जिसमें सभी निर्देशिकाओं और फ़ाइलों की एक सूची होती है, और locate कमांड इस डेटाबेस को कुशलतापूर्वक खोजता है, इसलिए यदि आप उन फ़ाइलों के लिए खोज करना चाहते हैं जो आज नहीं बनाए गए थे, तो यह होगा इस तरह के एक कार्य को पूरा करने का सबसे तेज़ तरीका।