1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
function str = DirList(dirnm,qdispfiles,lim,pref,folderFilter,fileFilter, qRelPath)
% str = DirList(dirnm,qdispfiles,lim,pref, folderFilter, fileFilter, qRelPath)
% recursively lists directories en returns the whole shit
% as a string
% all inputs except the first are optional
% QDISPFILES is a boolean indicating whether files should also be listed
% (true, default)
% LIM is the maximum number of levels that will be listed (default unlimited (inf))
% PREF is a prefix for each node in the directorylist
% FOLDERFILTER is to filter out unwanted folders (regexp). If a match
% occurs, the directory _IS NOT_ output and not recursed into
% FILEFILTER is to filter out unwanted files (regexp). If a match
% occurs, the files _ARE_ output. Use e.g. '\.m$' to only display files with
% .m extensions, '\.mat$|\.m$' to include all files with .mat or .m files.
% default: '.', shows all files.
% QRELPATH if true, a listing of existing paths relative to DIRNM. Default
% false
% DN 2007
% DN and Sam Yeung 2008-07-28 Optionally displays files
% DN 2009-02-14 Made more intuitive
% DN 2011-09-19 Added filters for folders and files
% input checking
if nargin<7 || isempty(qRelPath)
qRelPath = false;
end
if nargin<6 || isempty(fileFilter)
fileFilter = '.';
end
if nargin<5 || isempty(folderFilter)
folderFilter = '';
end
if nargin<4 || isempty(pref)
pref = '';
end
if nargin<3 || isempty(lim)
lim = inf;
end
if nargin<2 || isempty(qdispfiles)
qdispfiles = true;
end
% init
str = [];
fnms = dir(dirnm);
% do the work
for p=1:length(fnms)
if strcmp(fnms(p).name,'..') || strcmp(fnms(p).name,'.') % always returned by Matlab, never wanted
continue;
end
if qdispfiles && ~isdir([dirnm filesep fnms(p).name])
% check if not filtered out
if isempty(regexp(fnms(p).name,fileFilter, 'once'))
continue;
end
if qRelPath
str = [str pref fnms(p).name char(10)];
else
str = [str pref char(215) ' ' fnms(p).name char(10)];
end
end
if isdir([dirnm filesep fnms(p).name])
% check if not filtered out
if ~isempty(regexp(fnms(p).name,folderFilter, 'once'))
continue;
end
% append and recurse
if qRelPath
if lim>0
str = [str DirList([dirnm filesep fnms(p).name], qdispfiles, lim-1, [pref fnms(p).name '/'],folderFilter,fileFilter,qRelPath)];
end
else
str = [str fnms(p).name char(10)];
if lim>0
str = [str DirList([dirnm filesep fnms(p).name], qdispfiles, lim-1, [pref ' '],folderFilter,fileFilter,qRelPath)];
end
end
end
end
|