2012-01-05 35 views

Respuesta

48

Uso isdir campo de la dir de salida para separar los subdirectorios y archivos:

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

A continuación, puede eliminar . y ..

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

No deberías hacer nameFolds(1:2) = [], ya dir salida del directorio raíz no contiene esas carpetas de puntos. Al menos en Windows.

7

Esto es mucho más pulido y toda una línea:

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

Explicación: genpath() es un comando que escupe todas las subcarpetas de la parentdir en una sola línea de texto, separados por punto y coma. La función de expresión regular regexp() busca patrones en esa cadena y devuelve la opción: 'coincide' con el patrón. En este caso, el patrón es cualquier carácter, no un punto y coma = `[^;], repetido una o más veces en una fila = *. Por lo tanto, esto buscará la cadena y agrupar todos los caracteres que no sean punto y coma en salidas separadas, en este caso todos los directorios de la subcarpeta.

+2

Este comando muestra la carpeta principal, así como las subcarpetas - no es lo que el autor de la pregunta querido. – ioanwigmore

+1

Esta respuesta me ayudó a enumerar todos los subdirectorios rápidamente. Gracias. – axs

+1

¡Muy buena solución! Pero debe recordar esa función 'genpath' diseñada para generar una ruta de búsqueda, por lo que omite algunas carpetas específicas. Ver el [doc] (http://www.mathworks.com/help/matlab/ref/genpath.html). – yuk

0

El siguiente fragmento de código simplemente devuelve el nombre de las subcarpetas.

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

Y volver a utilizar con eficacia la primera solución proporcionada en diferentes escenarios de I hizo una función de ella:

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 
Cuestiones relacionadas