список подпапок в папке - Matlab (только подпапки, а не файлы) - PullRequest
33 голосов
/ 06 января 2012

Мне нужно перечислить подпапки внутри папки, используя Matlab.Если я использую

nameFolds = dir(pathFolder), 

, я получаю . и .. + имена подпапок.Затем я должен запустить nameFolds(1) = [] дважды.Есть ли лучший способ получить имена вложенных папок с помощью Matlab?Спасибо.

Ответы [ 4 ]

57 голосов
/ 06 января 2012

Используйте isdir поле вывода dir для разделения подкаталогов и файлов:

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

Вы можете удалить . и ..

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

Вы не должны делать nameFolds(1:2) = [], так как вывод dir из корневого каталога не содержит этих точечных папок. По крайней мере, в Windows.

8 голосов
/ 27 сентября 2013

Это намного лаже и все в одну строчку:

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

Разъяснения: genpath() - это команда, которая выплевывает все подпапки parentdir в одну строку текста, разделенную точкой с запятой. Функция регулярного выражения regexp() ищет шаблоны в этой строке и возвращает параметр: «соответствует» шаблону. В этом случае в качестве шаблона используется любой символ, не являющийся точкой с запятой = `[^;], повторяемый один или несколько раз подряд = *. Таким образом, будет выполнен поиск строки и сгруппированы все символы, которые не являются точками с запятой, в отдельные выходные данные - в этом случае все каталоги подпапок.

1 голос
/ 11 апреля 2017

Следующий фрагмент кода просто возвращает имя подпапок.

% `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 голосов
/ 10 мая 2017

И для эффективного повторного использования первого решения, представленного в различных сценариях, я сделал из него функцию:

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: /6207033/spisok-podpapok-v-papke-matlab-tolko-podpapki-a-ne-faily
    %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
...