liste des sous-dossiers dans un dossier - Matlab (seuls les sous-dossiers pas les fichiers)

je dois lister les sous-dossiers dans un dossier en utilisant Matlab. Si j'utilise

nameFolds = dir(pathFolder), 

je reçois . et .. + les noms de sous-dossiers. Je dois alors lancer nameFolds(1) = [] deux fois. Y a-t-il un meilleur moyen d'obtenir les noms des sous-dossiers en utilisant Matlab? Grâce.

29
demandé sur Maddy 2012-01-06 00:04:05

4 réponses

Utiliser isdir dans le champ "151930920 de sortie" pour séparer les sous-répertoires et fichiers:

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

vous pouvez alors supprimer . et ..

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

vous ne devriez pas faire nameFolds(1:2) = [] , car la sortie dir du répertoire racine ne contient pas ces dossiers de points. Au moins sur Windows.

51
répondu yuk 2012-01-05 20:20:36

C'est beaucoup plus tranchant et toute une ligne:

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

expliqué: genpath() est une commande qui crache tous les sous-dossiers du parentdir dans une seule ligne de texte, séparée par des points-virgule. La fonction d'expression régulière regexp() recherche les motifs dans cette chaîne et renvoie l'option: 'correspond' au motif. Dans ce cas, le modèle est n'importe quel caractère pas un point-virgule = ` [ ^ ;], répété une ou plusieurs fois dans une rangée = *. Donc, ce sera à la recherche la chaîne et grouper tous les caractères qui ne sont pas des points - virgule en sorties séparées-dans ce cas tous les répertoires de sous-dossiers.

7
répondu theLtran 2013-09-27 20:22:58

L'extrait de code suivant retourne le nom des sous-dossiers.

% `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
répondu Yas 2017-04-11 14:50:00

et pour réutiliser efficacement la première solution fournie dans différents scénarios j'en ai fait une fonction:

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
0
répondu Matthijs Noordzij 2017-05-10 13:47:49