2012-01-05 44 views

Trả lời

48

Sử dụng isdir lĩnh vực dir đầu ra để các thư mục con và các tập tin riêng biệt:

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

Sau đó bạn có thể loại bỏ ...

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

Bạn không nên làm nameFolds(1:2) = [], vì dir đầu ra từ thư mục gốc không chứa các thư mục chấm đó. Ít nhất là trên Windows.

7

Đây là áo mưa nhiều và tất cả một dòng:

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

Giải thích: genpath() là một lệnh mà spits ra tất cả các thư mục con của parentdir trong một dòng văn bản, cách nhau bởi dấu chấm phẩy. Hàm biểu thức chính quy regexp() tìm kiếm các mẫu trong chuỗi đó và trả về tùy chọn: 'đối sánh' với mẫu. Trong trường hợp này, mẫu là bất kỳ ký tự nào không phải là dấu chấm phẩy = `[^;], lặp lại một hoặc nhiều lần trong một hàng = *. Vì vậy, điều này sẽ tìm kiếm chuỗi và nhóm tất cả các ký tự không phải là dấu chấm phẩy vào các đầu ra riêng biệt - trong trường hợp này là tất cả các thư mục con.

+2

Lệnh này liệt kê các thư mục chính cũng như các thư mục con - nó không phải là những gì mà hỏi truy nã. – ioanwigmore

+1

Câu trả lời này đã giúp tôi liệt kê tất cả các thư mục con một cách nhanh chóng. Cảm ơn. – axs

+1

Giải pháp rất đẹp! Nhưng bạn cần phải nhớ rằng chức năng 'genpath' được thiết kế để tạo ra đường dẫn tìm kiếm, vì vậy nó bỏ qua một số thư mục cụ thể. Xem [doc] (http://www.mathworks.com/help/matlab/ref/genpath.html). – yuk

0

Đoạn mã sau chỉ trả về tên của thư mục con.

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

Và để có hiệu quả tái sử dụng các giải pháp đầu tiên được cung cấp trong khác nhau kịch bản của tôi đã thực hiện một chức năng ra khỏi nó:

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 
Các vấn đề liên quan