web-dev-qa-db-ja.com

フォルダー内のサブフォルダーのリスト-Matlab(ファイルではなくサブフォルダーのみ)

Matlabを使用して、フォルダー内のサブフォルダーをリストする必要があります。私が使用する場合

_nameFolds = dir(pathFolder), 
_

_._および_.._ +サブフォルダー名を取得します。その後、nameFolds(1) = []を2回実行する必要があります。 Matlabを使用してサブフォルダ名を取得するより良い方法はありますか?ありがとう。

34
Maddy

isdir出力のdirフィールドを使用して、サブディレクトリとファイルを分離します。

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

その後、_._と_.._を削除できます

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

ルートディレクトリからのdir出力にはドットフォルダーが含まれていないため、nameFolds(1:2) = []を実行しないでください。少なくともWindowsでは。

58
yuk

次のコードスニペットは、サブフォルダーの名前を返すだけです。

% `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

そして、異なるシナリオで提供される最初のソリューションを効果的に再利用するために、私はそれから機能を作りました:

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