erlang 导入库脚本

来源:互联网 发布:湖人12年纳什数据 编辑:程序博客网 时间:2024/06/06 04:37
erlang 导入库时要copy 还要写配置文件,现在写了一个脚本来实现这个功能。调用filetest( "/home/yangzm/erl/ej/","/opt/erlang/lib/erlang/lib" ).会把ebin 及依赖的ebin都 copy到目标,并在~/.erlang 中添加路径。代码如下:%///////////////////////
-module(b).-author("yangzm").-compile(export_all).format(Format, Args)->  lists:flatten(io_lib:format(Format,Args)).make_dir_list( Dir )->   R = filename:split( Dir ),   R1 = tl( R ),   Se = lists:seq( 1, length( R )-1 ),   lists:foreach(     fun( X )->       Rt = lists:sublist( R1, X ),       Rd = string:concat( "/", string:join( Rt, "/") ),       % 文件夹是否存在       S = filelib:is_dir( Rd ),       if          S =:= false ->           file:make_dir(Rd);          true->            ok       end     end,   Se ),   ok.copyDir(FromDir,TarDir)->  %%获取当前文件夹的所有文件列表(包括子文件夹)  {ok,AllFile} = file:list_dir_all(FromDir),  %%创建目标文件夹  %file:make_dir(TarDir),  make_dir_list( TarDir ),  %%尾递归遍历所有文件  loopCopy(AllFile,FromDir,TarDir).loopCopy(AllFile,FromDir,TarDir) ->  case AllFile of    [] ->      ok;    _ ->      %%每次拿第一个文件  One      [One|Other]=AllFile,      Path=FromDir++"/"++One,      Tar=TarDir++"/"++One,      %%判断当前文件是否是文件夹      IsDir= filelib:is_dir(Path),      %%if写法  所有判断的可能写在前面  true写在后面      if IsDir =:= false->        %%如果当前是文件  则拷贝到目标路径        file:copy(Path, Tar);      %%if 的默认值        true->          %%如果当前是文件夹 在目标路径创建文件夹  并拷贝当前文件夹          file:make_dir(Tar),          copyDir(Path,Tar)      end,      %%递归第一个文件后面的文件      loopCopy(Other,FromDir,TarDir)  end.copyitems(Source, Target, L3, L4)->  Out = L3 ++ L4,  lists:foreach(    fun(X)->      error_logger:info_msg("~p~n",[X]),      IsDir= filelib:is_dir( X ),      if IsDir =:= true ->        Tail = filename:basename( Source ),        Pos = string:rstr( X, Tail ),        Pos2 = string:len(X) - Pos + 1,        Ri = string:right( X, Pos2 ),        copyDir( X, lists:concat([Target,"/", Ri] ) ),        % 写入配置文件        {ok,[[Home]]} = init:get_argument(home),        Sconfig = string:concat( Home, "/.erlang"),        Con = lists:concat([Target,"/", Ri] ),        Sr = format( "\ncode:add_pathz(\"~s\").",[Con]),        case file:open( Sconfig, [read,binary,raw]) of          {ok,S}->            Size = filelib:file_size( Sconfig ),            {ok, Read} = file:pread( S, 0, Size ),            Sread = format("~s",[Read]),            file:close(S),            Swrite = string:concat( Sread, Sr ),            {ok,W} = file:open(Sconfig,[raw,write,binary]),            file:pwrite( W, 0, Swrite ),            file:close(W),            ok        end      end    end,    Out).filetest( Source, Target )->    {ok,Dir} = file:list_dir_all( Source ),    Ets = ets:new(abc,[duplicate_bag]),    case lists:member( "ebin", Dir ) of      true ->        St = lists:concat( [Source, "ebin"] ),        ets:insert(Ets,{St})    end,
case lists:member( "priv", Dir ) of  true->    St2 = lists:concat( [Source, "priv"] ),    ets:insert(Ets,{St2})end,case lists:member( "deps", Dir ) of  true ->    St2 = lists:concat( [Source, "deps"] ),    {ok,Dir2} = file:list_dir_all( St2 ),    L2 = lists:map( fun( X )-> lists:concat( [X, "/ebin"] ) end, Dir2 ),    L4 = lists:map( fun( X )-> lists:concat( [St2,"/", X] ) end, L2 ),    L3 = lists:map( fun( {X} )-> X end, ets:tab2list( Ets ) ),    copyitems(Source,Target,L3,L4),    ok;  false ->    L3 = lists:map( fun( {X} )-> X end, ets:tab2list( Ets ) ),    copyitems(Source,Target,L3,[])  end,io:format("fdas").
0 0
原创粉丝点击