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
|