list - fullfile - struct matlab
enumerar las subcarpetas en una carpeta-Matlab(solo subcarpetas, no archivos) (4)
Necesito enumerar las subcarpetas dentro de una carpeta usando Matlab. Si uso
nameFolds = dir(pathFolder),
Yo entiendo y ..
+ los nombres de la subcarpeta. Entonces tengo que ejecutar nameFolds(1) = []
dos veces. ¿Hay una mejor manera de obtener los nombres de Subfolders usando Matlab? Gracias.
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};
Esto es mucho más astuto y toda una línea:
dirs = regexp(genpath(parentdir),[''[^;]*''],''match'');
Explicado: genpath()
es un comando que escupe todas las subcarpetas del parentdir
en una sola línea de texto, separadas 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.
Utilice el campo isdir
de la salida del dir
para separar los subdirectorios y archivos:
d = dir(pathFolder);
isub = [d(:).isdir]; %# returns logical vector
nameFolds = {d(isub).name}'';
Luego puedes eliminar .
y ..
nameFolds(ismember(nameFolds,{''.'',''..''})) = [];
No debe hacer nameFolds(1:2) = []
, ya que la salida del directorio raíz no contiene esas carpetas de puntos. Al menos en Windows.
Y para reutilizar efectivamente la primera solución provista en diferentes escenarios, hice una función de esto:
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://.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