scan.lua

changeset 1
e2face1be50e
child 2
3975fa5ed630
equal deleted inserted replaced
0:30d76ecdd725 1:e2face1be50e
1 require('lfs')
2
3 local function filtered_dir(d)
4 local f, s_, v_ = lfs.dir(d)
5 local function g(s, v)
6 while true do
7 local vn=f(s, v)
8 if vn~='.' and vn~='..' then
9 return vn
10 end
11 end
12 end
13 return g, s_, v_
14 end
15
16
17 function scan(d)
18 local h={}
19 for f in filtered_dir(d) do
20 local n=d..'/'..f
21 local a=lfs.attributes(n)
22 if a.mode=='directory' then
23 local nh=scan(n)
24 h[n]=nh
25 elseif a.mode=='file' then
26 h[n]=true
27 end
28 end
29 return h
30 end
31
32 function hfold(h, a, f, g)
33 for n, c in pairs(h) do
34 if type(c)=='table' then
35 hfold(c, f(a, n), f, g)
36 else
37 g(a, n)
38 end
39 end
40 end

mercurial