Mercurial > hg > ishara
diff general/fileutils/listfiles.m @ 4:e44f49929e56
Adding reorganised general toolbox, now in several subdirectories.
author | samer |
---|---|
date | Sat, 12 Jan 2013 19:21:22 +0000 |
parents | |
children | 47cb292350f3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/general/fileutils/listfiles.m Sat Jan 12 19:21:22 2013 +0000 @@ -0,0 +1,47 @@ +function L=listfiles(dirname,varargin) +% listfiles - list files in a directory +% +% listfiles :: text ~'directory path', +% options { +% 'pattern':text ~'pattern to match files against', +% 'regext':text ~'regular expression to match files against', +% 'ext':text ~'file names must in end in this' +% 'rec':bool/0 ~'recursive search?' +% } +% -> {[N]->text} ~'cell array of N paths'. + +opts=prefs('rec',0,varargin{:}); + +if isfield(opts,'pattern'), + dirpat = fullfile(dirname,opts.pattern); +else + dirpat = dirname; +end + +if isfield(opts,'regexp'), + filter=@(f)(~isempty(regexp(f,opts.regexp))); +elseif isfield(opts,'ext'), + filter=@(f)endswith(f,opts.ext); +else + filter=@(f)true; +end + +D=dir(dirpat); +L={}; + +for i=1:length(D) + f=D(i); + if ~f.isdir && feval(filter,f.name), + L=[L {fullfile(dirname,f.name)}]; + end +end + +if opts.rec + if strcmp(dirname,dirpat), DX=D; else DX=dir(dirname); end + for i=1:length(DX) + f=DX(i); + if f.isdir && ~strcmp(f.name,'.') && ~strcmp(f.name,'..') + L=[L,listfiles(fullfile(dirname,f.name),opts)]; + end + end +end