2012-01-05 17 views

risposta

48

Uso isdir campo della dir uscita per separare le sottodirectory e file:

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

È quindi possibile rimuovere . e ..

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

Non si dovrebbe fare nameFolds(1:2) = [], dal momento che dir uscita dalla directory principale non contiene quelle dot-cartelle. Almeno su Windows.

7

Questo è molto più impermeabile e tutta una linea:

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

spiegato: genpath() è un comando che sputa fuori tutte le sottocartelle della parentdir in una sola riga di testo, separati da virgola. La funzione di espressione regolare regexp() cerca gli schemi in quella stringa e restituisce l'opzione: "corrisponde" al modello. In questo caso il pattern è qualsiasi carattere non un punto e virgola = `[^;], ripetuto una o più volte di seguito = *. Quindi questo cercherà la stringa e raggrupperà tutti i caratteri che non sono punti e virgola in output separati - in questo caso tutte le directory delle sottocartelle.

+2

Questo comando elenca la cartella principale così come le sottocartelle - non è quello che il richiedente ricercato. – ioanwigmore

+1

Questa risposta mi ha aiutato a elencare rapidamente tutte le subdirectory. Grazie. – axs

+1

Soluzione molto bella! Ma è necessario ricordare che la funzione 'genpath' è progettata per generare il percorso di ricerca, quindi salta alcune cartelle specifiche. Vedi il [doc] (http://www.mathworks.com/help/matlab/ref/genpath.html). – yuk

0

Il seguente frammento di codice restituisce semplicemente il nome delle sottocartelle.

% `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

E di riutilizzare in modo efficace la prima soluzione prevista in diversi scenari di ho fatto una funzione di fuori di esso:

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 
Problemi correlati