-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodify.erl
116 lines (110 loc) · 3.79 KB
/
modify.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
-module(modify).
%%%=======================STATEMENT====================
%% @doc 修改所有文件的mtime属性,解决因往返修改系统时间导致rebar编译所有文件问题。
-description("modify").
-copyright('').
-author("wmh, SuperMuscleMan@outlook.com").
-vsn(1).
%%%=======================EXPORT=======================
-export([start/0, start/1]).
%%-export([test/2]).
%%%=======================INCLUDE======================
-include_lib("kernel/include/file.hrl").
%%%=======================RECORD=======================
%%%=======================DEFINE=======================
-define(Default_RootDir, "../").%%根目录
-define(Default_Suffix, [".erl", ".hrl"]).%%文件后缀
-define(Default_ErlCInfo, "../.rebar/erlcinfo").%%rebar记录文件路径
%%%=================EXPORTED FUNCTIONS=================
%% -----------------------------------------------------------------
%% Func:
%% Description: 文件修改时间
%% Returns:
%% -----------------------------------------------------------------
start() ->
start(?Default_RootDir).
start(RootDir) ->
erlang:statistics(wall_clock),
io:format("[~p] [~p] | start.~n", [?MODULE, ?LINE]),
All = all_regular(RootDir, ?Default_Suffix),
io:format("[~p] [~p] | total num:~p~n", [?MODULE, ?LINE, {length(All)}]),
CurTime = calendar:local_time(),
modify_time(All, CurTime),
del_file(?Default_ErlCInfo),
{_, UsrTime} = erlang:statistics(wall_clock),
io:format("[~p] [~p] | success, usrTime:~pms~n", [?MODULE, ?LINE, {UsrTime}]).
%% -----------------------------------------------------------------
%% Func:
%% Description:删除文件
%% Returns:
%% -----------------------------------------------------------------
del_file(Path) ->
case file:delete(Path) of
ok ->
ok;
Err ->
exit({Err, Path})
end.
%% -----------------------------------------------------------------
%% Func:
%% Description:修改时间
%% Returns:
%% -----------------------------------------------------------------
modify_time([{Path, FileInfo} | T], CurTime) ->
case file:write_file_info(Path, FileInfo#file_info{mtime = CurTime}) of
ok ->
modify_time(T, CurTime);
Err ->
io:format("[~p] [~p] | Err:~p~n", [?MODULE, ?LINE, {Err, Path}]),
modify_time(T, CurTime)
end;
modify_time([], _) ->
ok.
%% -----------------------------------------------------------------
%% Func:
%% Description:获取所有文件
%% Returns:
%% -----------------------------------------------------------------
all_regular(Dir, Suffix) ->
List = list_dir(Dir),
all_regular(List, Dir, [], Suffix, []).
all_regular([], _Dir, [], _Suffix, Result) ->
Result;
all_regular([], _Dir, [{SubDir, SubList} | T], Suffix, Result) ->
all_regular(SubList, SubDir, T, Suffix, Result);
all_regular([H | T], Dir, DirList, Suffix, Result) ->
Path = Dir ++ [$/ | H],
case file:read_file_info(Path) of
{ok, #file_info{type = directory}} ->
SubList = list_dir(Path),
all_regular(T, Dir, [{Path, SubList} | DirList], Suffix, Result);
{ok, #file_info{type = regular} = Info} ->
NowResult =
case lists:member(filename:extension(H), Suffix) of
true ->
[{Path, Info} | Result];
_ ->
Result
end,
all_regular(T, Dir, DirList, Suffix, NowResult);
_ ->
all_regular(T, Dir, DirList, Suffix, Result)
end.
%==========================DEFINE=======================
%% -----------------------------------------------------------------
%% Func:
%% Description:获取dir目录下所有文件名
%% Returns:
%% -----------------------------------------------------------------
list_dir(Dir) ->
case file:list_dir(Dir) of
{ok, Var} -> Var;
Err -> exit({Err, Dir})
end.
%% -----------------------------------------------------------------
%% Func:
%% Description:测试
%% Returns:
%% -----------------------------------------------------------------
%%test(Dir, Suffix) ->
%% all_regular(Dir, Suffix).