列出文件夹中的子文件夹 - Matlab(仅子文件夹,不是文件)

时间:2012-01-05 20:04:05

标签: list matlab directory dir

我需要使用Matlab列出文件夹中的子文件夹。如果我使用

nameFolds = dir(pathFolder), 

我得到... +子文件夹名称。然后,我必须运行nameFolds(1) = []两次。有没有更好的方法来使用Matlab获取subFolder名称?感谢。

4 个答案:

答案 0 :(得分:55)

使用isdir输出的dir字段分隔子目录和文件:

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

然后,您可以删除...

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

您不应该nameFolds(1:2) = [],因为根目录的dir输出不包含这些点文件夹。至少在Windows上。

答案 1 :(得分:8)

这一点非常流畅,只有一行:

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

说明: genpath()是一个命令,它在一行文本中将parentdir的所有子文件夹吐出,用分号分隔。正则表达式函数regexp()搜索该字符串中的模式,并返回选项:'matches'到模式。在这种情况下,模式是任何不是分号=“[^;]的字符,在一行中重复一次或多次= *。因此,这将搜索字符串并将所有不是分号的字符分组到单独的输出中 - 在本例中为所有子文件夹目录。

答案 2 :(得分:1)

以下代码段仅返回子文件夹的名称。

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

答案 3 :(得分:0)

为了有效地重用不同场景中提供的第一个解决方案,我从中创建了一个函数:

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