1.使用正则匹配一个目录树下的文件
例子:我有如下目录
c:\deniel---
|--hello.mp3
|--hi.mp3
|--ping.txt
|--gun
|---Ak.mp3
|---M4.mp3
|--M4.txt
|--Ak.txt
如何找出所有在deniel 目录文件下所有mp3文件
如果你是个python 粉,不多说 肯定是用os.walk 建立迭代器,在迭代器里做过滤。
使用erlang ,只要一行。你没听错。就是一行。上代码
Dir="c:/deniel" %注意eralng 中的路径是用/分隔, UNIX风格
filelib:fold_files(Dir,".+\.mp3$",true,fun(Filename,AccIn) ->AccIn++[Filename] end,[]).
#["c/deniel/hello.mp3","c/deniel/hi.mp3","c/deniel/gun/Ak.mp3","c/deniel/gun/M4.mp3"]
我先晒下filelib:fold 这个函数的定义
--------------------------------------------------------------------
fold_files(Dir, RegExp, Recursive, Fun, AccIn) -> AccOut
Types:
Dir = dirname() 说明Dir 必须是个路径
RegExp = string() 文件名的正则表达式
Recursive = boolean() 是否要递归,不需要递归,只返回当前目录下的那一层匹配文件
Fun = fun((F :: file:filename(), AccIn) -> AccOut)
这个函数是个过滤函数,文档的原来用意是当有些文件因为字符转换的原因无法被识别时(比如俄文,日文),可以使用这个函数做转换,在识别过滤。但你可以走的更远,你可以做更细化的过滤,比如文件大小必须在某个范围之内。这个函数执行完,可以输出一个结果。为什么第二个参数是ACCin 这个就是让你放符合条件的文件的列表用的。
AccIn = AccOut = term()
一个循环的中间变量,你可以在里面做个列表,把符合条件的文件放进去