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