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