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.
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.
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.
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};
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