Список подпапок в папке - Matlab (только вложенные папки, а не файлы)
Мне нужно перечислить подпапки внутри папки с помощью Matlab. Если я использую
nameFolds = dir(pathFolder),
Я получаю .
и ..
+ имена подпапок. Затем мне нужно запустить nameFolds(1) = []
дважды. Есть ли лучший способ получить имена subFolder с помощью Matlab? Спасибо.
Ответы
Ответ 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