annotate 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
rev   line source
samer@4 1 function L=listfiles(dirname,varargin)
samer@4 2 % listfiles - list files in a directory
samer@4 3 %
samer@4 4 % listfiles :: text ~'directory path',
samer@4 5 % options {
samer@4 6 % 'pattern':text ~'pattern to match files against',
samer@4 7 % 'regext':text ~'regular expression to match files against',
samer@4 8 % 'ext':text ~'file names must in end in this'
samer@4 9 % 'rec':bool/0 ~'recursive search?'
samer@4 10 % }
samer@4 11 % -> {[N]->text} ~'cell array of N paths'.
samer@4 12
samer@4 13 opts=prefs('rec',0,varargin{:});
samer@4 14
samer@4 15 if isfield(opts,'pattern'),
samer@4 16 dirpat = fullfile(dirname,opts.pattern);
samer@4 17 else
samer@4 18 dirpat = dirname;
samer@4 19 end
samer@4 20
samer@4 21 if isfield(opts,'regexp'),
samer@4 22 filter=@(f)(~isempty(regexp(f,opts.regexp)));
samer@4 23 elseif isfield(opts,'ext'),
samer@4 24 filter=@(f)endswith(f,opts.ext);
samer@4 25 else
samer@4 26 filter=@(f)true;
samer@4 27 end
samer@4 28
samer@4 29 D=dir(dirpat);
samer@4 30 L={};
samer@4 31
samer@4 32 for i=1:length(D)
samer@4 33 f=D(i);
samer@4 34 if ~f.isdir && feval(filter,f.name),
samer@4 35 L=[L {fullfile(dirname,f.name)}];
samer@4 36 end
samer@4 37 end
samer@4 38
samer@4 39 if opts.rec
samer@4 40 if strcmp(dirname,dirpat), DX=D; else DX=dir(dirname); end
samer@4 41 for i=1:length(DX)
samer@4 42 f=DX(i);
samer@4 43 if f.isdir && ~strcmp(f.name,'.') && ~strcmp(f.name,'..')
samer@4 44 L=[L,listfiles(fullfile(dirname,f.name),opts)];
samer@4 45 end
samer@4 46 end
samer@4 47 end