2012-01-05 22 views
24

मुझे मैटलैब का उपयोग करके फ़ोल्डर के अंदर उपफोल्डर्स को सूचीबद्ध करने की आवश्यकता है। अगर मैंफ़ोल्डर में सबफ़ोल्डर सूचीबद्ध करें - मैटलैब (केवल उपफोल्डर्स, फाइल नहीं)

nameFolds = dir(pathFolder), 

का उपयोग मैं . और .. + सबफ़ोल्डर नाम मिलता है। मुझे फिर nameFolds(1) = [] दो बार चलाने के लिए है। Matlab का उपयोग कर सबफ़ोल्डर नाम प्राप्त करने का कोई बेहतर तरीका है? धन्यवाद। उपनिर्देशिका और फ़ाइलों को अलग करने के लिए

उत्तर

48

उपयोग isdirdir के क्षेत्र उत्पादन:

d = dir(pathFolder); 
isub = [d(:).isdir]; %# returns logical vector 
nameFolds = {d(isub).name}'; 

तो आप . को हटा सकते हैं और ..

nameFolds(ismember(nameFolds,{'.','..'})) = []; 

आप nameFolds(1:2) = [] ऐसा नहीं करना चाहिए, रूट निर्देशिका से dir उत्पादन के बाद से उन डॉट फ़ोल्डर्स नहीं है। कम से कम विंडोज़ पर।

7

यह बहुत बरसाती कोट है और सभी एक पंक्ति:

dirs = regexp(genpath(parentdir),['[^;]*'],'match'); 

व्याख्या: genpath() एक कमांड जो पाठ की एक पंक्ति को अर्धविराम से अलग में parentdir के सभी उप-फ़ोल्डर बाहर थूक है। नियमित अभिव्यक्ति फ़ंक्शन regexp() उस स्ट्रिंग में पैटर्न की खोज करता है और विकल्प को वापस करता है: पैटर्न में 'मिलान'। इस मामले में पैटर्न कोई चरित्र नहीं है अर्धविराम = '[^;], पंक्ति = * में एक या अधिक बार दोहराया जाता है। तो यह स्ट्रिंग और समूह को उन सभी पात्रों को खोजेगा जो अलग-अलग आउटपुट में अर्धविराम नहीं हैं - इस मामले में सभी सबफ़ोल्डर निर्देशिकाएं।

+2

यह आदेश सूचियों मुख्य फ़ोल्डर के साथ ही उप-फ़ोल्डर - यह नहीं है क्या प्रश्नकर्ता चाहता था। – ioanwigmore

+1

इस उत्तर ने मुझे सभी उप निर्देशिकाओं को जल्दी से सूचीबद्ध करने में मदद की। धन्यवाद। – axs

+1

बहुत अच्छा समाधान! लेकिन आपको याद रखना होगा कि 'पथपथ' फ़ंक्शन खोज पथ उत्पन्न करने के लिए डिज़ाइन किया गया है, इसलिए यह कुछ विशिष्ट फ़ोल्डरों को छोड़ देता है। [डॉक्टर] देखें (http://www.mathworks.com/help/matlab/ref/genpath.html)। – yuk

0

निम्न कोड स्निपेट केवल उप-फ़ोल्डर का नाम देता है।

% `rootDir` is given 
dirs = dir(rootDir); 
% remove `.` and `..` 
dirs(1:2) = []; 
% select just directories not files 
dirs = dirs([obj.dirs.isdir]); 
% select name of directories 
dirs = {dirs.name}; 
0

और प्रभावी रूप से पुन: उपयोग करने के लिए अलग परिदृश्य के में प्रदान की पहली समाधान मैं इसे से बाहर एक समारोह बना दिया:

function [ dirList ] = get_directory_names(dir_name) 

    %get_directory_names; this function outputs a cell with directory names (as 
    %strings), given a certain dir name (string) 
    %from: http://stackoverflow.com/questions/8748976/list-the-subfolders- 
    %in-a-folder-matlab-only-subfolders-not-files 

    dd = dir(dir_name); 
    isub = [dd(:).isdir]; %# returns logical vector 
    dirList = {dd(isub).name}'; 
    dirList(ismember(dirList,{'.','..'})) = []; 

end