2012-12-16 17 views
20

मेरे मेकफ़ाइल में मुझे किसी अन्य निर्देशिका में मौजूद सभी निर्देशिकाओं की एक सूची प्राप्त करने की आवश्यकता है।वाइल्डकार्ड सभी निर्देशिकाओं की सूची प्राप्त करने के लिए

को उसी फ़ोल्डर में सभी निर्देशिकाओं की एक सूची प्राप्त करने के लिए मेरी Makefile मैं का उपयोग करें:

DIRECTORIES = $(wildcard */) 

all: 
    echo $(DIRECTORIES) 

जो ठीक काम करता है, और मुझे वांछित सूची देता है। लेकिन अगर मैं

DIRECTORIES = $(wildcard ../Test/*/) 

all: 
    echo $(DIRECTORIES) 

का उपयोग कर एक और निर्देशिका में सभी निर्देशिकाओं की एक सूची है करना चाहते हैं मुझे लगता है कि निर्देशिका में सभी फ़ाइलों (पथ के साथ), .h और .cpp फ़ाइलों सहित की एक सूची प्राप्त।

कोई सुझाव क्यों होता है और इसे कैसे ठीक किया जाए? सूची प्राप्त करने के लिए अन्य समाधान भी स्वागत है।

+0

क्या आप वाकई wildcarding एक अच्छा विचार है कर रहे हैं? –

+0

@ जोनाथन लेफ्लर मैं मैन्युअल रूप से प्रत्येक निर्देशिका को जोड़ना नहीं चाहता, क्योंकि यह एक बड़ी परियोजना है। यदि आपको पता है कि वाइल्डकार्डिंग से कैसे बचें, तो मुझे बताएं। – Haatschii

+0

कारण आप इस व्यवहार को देख रहे हैं GLIBC के आपके संस्करण में एक बग के कारण है: https://sourceware.org/bugzilla/show_bug.cgi?id=10278 – MadScientist

उत्तर

27

उपयोग sort और dir कार्यों को एक साथ wildcard साथ:

DIRECTORY = $(sort $(dir $(wildcard ../Test/*/))) 

जीएनयू बनाने से मैनुअल:

$ (dir नाम ...) अर्क में प्रत्येक फ़ाइल नाम की निर्देशिका-भाग नाम। फ़ाइल नाम का निर्देशिका-भाग सब कुछ है (और इसमें) अंतिम स्लैश के माध्यम से। यदि फ़ाइल नाम में कोई स्लैश नहीं है, तो निर्देशिका भाग स्ट्रिंग './' है।

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

इसके अलावा इस लेख में दूसरे और तीसरे विधि को देखो: Automatically Creating a List of Directories

+2

हाँ, यह नौकरी करता है। बहुत बहुत धन्यवाद। – Haatschii

+0

यह मेरे लिए अनावश्यक रूप से जटिल लगता है। मुझे नहीं पता कि उदाहरण के लिए आपको 'सॉर्ट' क्यों करना है। आप इसका उपयोग कर सकते हैं: '$ (डीआईआर $ (वाइल्डकार्ड ../ टेस्ट/* /।)) '(अंतिम चरित्र को स्लैश नहीं है) सुनिश्चित करने के लिए अंत में' .' जोड़ना नोट करें और यह हर जगह काम करेगा। – MadScientist

+0

@MadScientist, 'sort' यह सुनिश्चित करता है कि निर्देशिका वर्णानुक्रम में ट्रैवर्स हो। यह उपयोगी है यदि आप एक नज़र में बताने में सक्षम होना चाहते हैं कि उदाहरण के लिए निर्माण कितना दूर है। जब मैंने इसे छोड़ा, तो मैंने पाया कि विंडोज़ पर, निर्देशिका को वर्णानुक्रम में घुमाया गया था, लेकिन लिनक्स पर, वे नहीं थे। – Alan

15

प्रयास करें:

$(shell find <directory> -maxdepth 1 -type d) 

जो आप उपनिर्देशिकाएं में जाने के बिना उसकी निर्देशिका के अंदर निर्देशिका की सूची दे देंगे। आपको उस सूची को साफ़ करने की आवश्यकता हो सकती है क्योंकि इसमें सूचीबद्ध प्रत्येक निर्देशिका से पहले . और ./ शामिल होगा।

+6

' 'के बिना सूची प्राप्त करने के लिए आप' -मिंदपथ 1 -मैक्सडेप 1'। –

संबंधित मुद्दे

 संबंधित मुद्दे