samer@4: function L=listfiles(dirname,varargin) samer@4: % listfiles - list files in a directory samer@4: % samer@7: % listfiles :: samer@7: % text ~'directory path', samer@4: % options { samer@4: % 'pattern':text ~'pattern to match files against', samer@4: % 'regext':text ~'regular expression to match files against', samer@4: % 'ext':text ~'file names must in end in this' samer@4: % 'rec':bool/0 ~'recursive search?' samer@4: % } samer@4: % -> {[N]->text} ~'cell array of N paths'. samer@4: samer@37: opts=options('rec',0,varargin{:}); samer@4: samer@4: if isfield(opts,'pattern'), samer@4: dirpat = fullfile(dirname,opts.pattern); samer@4: else samer@4: dirpat = dirname; samer@4: end samer@4: samer@4: if isfield(opts,'regexp'), samer@4: filter=@(f)(~isempty(regexp(f,opts.regexp))); samer@4: elseif isfield(opts,'ext'), samer@4: filter=@(f)endswith(f,opts.ext); samer@4: else samer@4: filter=@(f)true; samer@4: end samer@4: samer@4: D=dir(dirpat); samer@4: L={}; samer@4: samer@4: for i=1:length(D) samer@4: f=D(i); samer@4: if ~f.isdir && feval(filter,f.name), samer@4: L=[L {fullfile(dirname,f.name)}]; samer@4: end samer@4: end samer@4: samer@4: if opts.rec samer@4: if strcmp(dirname,dirpat), DX=D; else DX=dir(dirname); end samer@4: for i=1:length(DX) samer@4: f=DX(i); samer@4: if f.isdir && ~strcmp(f.name,'.') && ~strcmp(f.name,'..') samer@4: L=[L,listfiles(fullfile(dirname,f.name),opts)]; samer@4: end samer@4: end samer@4: end