web-dev-qa-db-fra.com

répertorier les sous-dossiers dans un dossier - Matlab (uniquement les sous-dossiers, pas les fichiers)

J'ai besoin de répertorier les sous-dossiers dans un dossier à l'aide de Matlab. Si j'utilise

nameFolds = dir(pathFolder), 

J'obtiens . Et .. + Les noms des sous-dossiers. Je dois ensuite exécuter nameFolds(1) = [] deux fois. Existe-t-il un meilleur moyen d'obtenir les noms des sous-dossiers à l'aide de Matlab? Merci.

34
Maddy

Utilisez le champ isdir de la sortie dir pour séparer les sous-répertoires et les fichiers:

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

Vous pouvez ensuite supprimer . Et ..

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

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

58
yuk

C'est beaucoup plus lisse et tout en une seule ligne:

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

Expliqué: genpath() est une commande qui crache tous les sous-dossiers de parentdir dans une seule ligne de texte, séparés par des points-virgules. La fonction d'expression régulière regexp() recherche les modèles dans cette chaîne et renvoie l'option: 'correspond' au modèle. Dans ce cas, le motif est n'importe quel caractère et non un point-virgule = `[^;], répété une ou plusieurs fois de suite = *. Ainsi, cela recherchera la chaîne et regroupera tous les caractères qui ne sont pas des points-virgules dans des sorties distinctes - dans ce cas, tous les répertoires des sous-dossiers.

8
theLtran

L'extrait de code suivant renvoie simplement 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};
1
Yas

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