List 列出文件夹-Matlab中的子文件夹(仅子文件夹,而不是文件)
我需要使用Matlab列出文件夹中的子文件夹。如果我使用List 列出文件夹-Matlab中的子文件夹(仅子文件夹,而不是文件),list,matlab,directory,dir,List,Matlab,Directory,Dir,我需要使用Matlab列出文件夹中的子文件夹。如果我使用 nameFolds = dir(pathFolder), 我得到和。+子文件夹名称。然后我必须运行两次nameFolds(1)=[]。是否有更好的方法使用Matlab获取子文件夹名称?谢谢。使用dir字段的isdir输出到单独的子目录和文件: d = dir(pathFolder); isub = [d(:).isdir]; %# returns logical vector nameFolds = {d(isub).name}';
nameFolds = dir(pathFolder),
我得到
和。
+子文件夹名称。然后我必须运行两次nameFolds(1)=[]
。是否有更好的方法使用Matlab获取子文件夹名称?谢谢。使用dir
字段的isdir
输出到单独的子目录和文件:
d = dir(pathFolder);
isub = [d(:).isdir]; %# returns logical vector
nameFolds = {d(isub).name}';
然后可以删除
和。
nameFolds(ismember(nameFolds,{'.','..'})) = [];
您不应该执行
nameFolds(1:2)=[]
,因为从根目录输出的dir
不包含这些点文件夹。至少在Windows上是这样。这是一条更加流畅的线条:
dirs = regexp(genpath(parentdir),['[^;]*'],'match');
解释:
genpath()
是一个命令,它在一行文本中以分号分隔出parentdir
的所有子文件夹。正则表达式函数regexp()。在这种情况下,模式是任何字符,而不是分号=`[^;],在一行=*中重复一次或多次。因此,这将搜索字符串并将所有非分号的字符分组到单独的输出中—在本例中为所有子文件夹目录。以下代码片段仅返回子文件夹的名称
% `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};
为了有效地重用在不同场景中提供的第一个解决方案,我利用它制作了一个函数:
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
这个命令列出主文件夹和子文件夹——这不是询问者想要的。这个答案帮助我快速列出所有子目录。谢谢。非常好的解决方案!但您需要记住,genpath
函数用于生成搜索路径,因此它跳过了一些特定的文件夹。请参阅。此外,您需要使用pathsep而不是硬编码分号,因为unix上的路径分隔符与windows上的不同。如果您希望包括所有隐藏的子目录(例如,如果您使用git
),则可以使用startsWith(nameFolds,'.')
而不是ismember(nameFolds,{.'.'..})
。