Подтвердить что ты не робот

Список подпапок в папке - Matlab (только вложенные папки, а не файлы)

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

nameFolds = dir(pathFolder), 

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Это много slicker и все одна строка:

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

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

Ответ 3

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

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

Ответ 4

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

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/info/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